八. python面向对象(反射)

一 . 反射

# 反射:是用字符串类型的名字 取获取变量方法操作

# hasattr()
# getattr()
# delattr()
# setattr()
# isinstance(obj,cls) 检查是否obj是否是类 cls的对象
class Lo(object):
       pass
aa=Lo()
print(isinstance(aa,Lo))


# issubclass(sub,super) 检查sub类是否是super的派生类(子类)
class A:pass
class B(A):pass
print(issubclass(B,A))
print(issubclass(A,B))

 1.hasattr()

class Da(object):
    cc="188888"
    def __init__(self,name):
        self.name=name

    def aa(self):
        print("反射!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11")
f=Da("张三")

cc=getattr(f,'aa')
cc()
print("**********************************************")
f.aa()
class A:
    def fun(self):
        print("哈哈哈哈哈哈!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
a=A()
a.name="张三"
a.age=25
# 反射对象的属性
ret=getattr(a,"name")  # 通过字符串取到的值
print(ret)
print("**********************")
# 反射对象的方法
r=getattr(a,"fun")
r()
print(a.__dict__)
# 反射类的方法 classmethod staticmethod
class B:
    bb=20
    @classmethod
    def fun(self):
        print("!!!!!!!!!!")

print(B.bb)# 20

# 反射类属性
ret=getattr(B,"bb")
print(ret)# 20

# 反射类方法
re=getattr(B,"fun")
re()  # !!!!!!!!!!

反射模块

# my.py 文件

day='Monday' #  周一

def Gun():
    print("模块中!!!!!!!!!!!!!!反射")
# 模块
# 反射模块的属性
import  my
r=getattr(my,"day")
print(r)
# 反射模块的方法
ret=getattr(my,'Gun')
ret()
import  sys
# 内置模块也能用
# 反射自己模块中的变量(就是本模块)
def Gn():
    print("44444444444444")
ye=1111111111
print(sys.modules['__main__'].ye)
k=getattr(sys.modules['__main__'],"ye")
print(k)
# 反射自己模块中的方法(函数)
t=getattr(sys.modules['__main__'],"Gn")
t()
ff=input(">>>>")
gg=getattr(sys.modules['__main__'],ff)
print(gg)

猜你喜欢

转载自www.cnblogs.com/Sup-to/p/10884341.html