反射
1 class A(): 2 def __init__(self,name): 3 self.name = name 4 5 def print(self): 6 print("%s是只猫" %self.name) 7 class B(A): 8 def hello(self): 9 print("in B") 10 a = A("pp") 11 a.print() 12 print(isinstance(a,A)) 13 #isinstance(对象名,类名)
isdubclass:issubclass(子类名,父类名)如果返回True说明有继承关系,用来判断类与类之间的关系
1 class A(): 2 def __init__(self,name): 3 self.name = name 4 5 def print(self): 6 print("%s是只猫" %self.name) 7 class B(A): 8 def hello(self): 9 print("in B") 10 a = A("pp") 11 a.print() 12 print(issubclass(B,A)) #True 13 print(issubclass(A,B)) #False 14 15 #多继承也是可以的 16 class C():pass 17 18 class A(C): 19 def __init__(self,name): 20 self.name = name 21 22 def print(self): 23 print("%s是只猫" %self.name) 24 class B(A): 25 def hello(self): 26 print("in B") 27 a = A("pp") 28 a.print() 29 print(issubclass(B,C)) #True
getattr:反射,使用字符串数据类型的变量名,访问一个命名空间中的名字 正常情况下如果拿到这个变量,那么如果有这个变量的字符串形式,就可以使用反射获取到这个值 找一个属性,直接就可以找到这个属性的值 找一个方法,找到的是这个方法的内存地址
类中的反射:类可以获取类中的属性和方法
1 class A(): 2 def func(self): 3 print("in func") 4 5 r = getattr(A,"func");r(1) 6 r = getattr(A,"func")(1)
hasattr:判断一个命名空间中是否有这个变量名,如果有则返回True,否则返回False
使用类命名空间中的名字 getattr(类名,"名字")
1 class A(): 2 def func(self): 3 print("in func") 4 r = getattr(A,"func")(1)
对象使用对象能用的方法和属性 getattr(模块名,"名字")
1 2 class A(): 3 def func(self): 4 print("in func") 5 a = A() 6 r = getattr(a,"func")()
模块使用模块中的名字 导入模块 getattr(模块名,"名字")
import os
getter(os,'rename'('user','user_info')从自己所在的模块中使用自己名字 import sys getattr(sys.modules['__main__'],'名字')
1 2 import sys 3 def func1(): 4 print("in func") 5 def dunc2(): 6 print("in func2") 7 func = input(">>>") 8 getattr(sys.modules["__main__"],func)() 9 10 if hasattr(sys.modules["__main__"],func): #用来判断是否有这个函数可以被调用 11 getattr(sys.modules["__main__"],func)()
getattr一定要和hasattr配合使用
setattr:设置属性
1 class A(): 2 def func(self): 3 print("in func") 4 5 a = A() 6 setattr(a,"age",18) #没有就添加这个属性 7 print(A.__dict__) 8 print(a.age) 9 setattr(a,"age",22) #如果有这个属性就更改这个属性的值 10 print(a.age)
delattr:删除属性
1 class A(): 2 def func(self): 3 print("in func") 4 5 a = A() 6 setattr(a,"age",18) 7 print(A.__dict__) 8 print(a.age) 9 setattr(a,"age",22) 10 print(a.age) 11 delattr(a,"age") #有就删除,没有则报错

浙公网安备 33010602011771号