一 . 反射
# 反射:是用字符串类型的名字 取获取变量方法操作
# 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)