类之反射

1.getattr/hasattr/setattr/delattr操作对象中的成员

1 class Foo:
2     def __init__(self,name,age):
3         self.name = name
4         self.age = age
5     def show(self):
6         return '%s-%s' %(self.name,self.age)
7 obj = Foo('alex',18)

(1)getattr

1 s = getattr(obj,'name')    #用getattr以字符串方式从obj对象里获取字段成员
2 print(s)
3 
4 func = getattr(obj,'show')  #用getattr以字符串方式从obj对象里获取方法成员
5 print(func)
6 r = func()      #执行获取到的方法
7 print(r)

(2)hasattr

t = hasattr(obj,'name')    #hasattr判断对象里是否有指定成员
print(t)

(3)setattr

setattr(obj,'gender','men')   #setattr设置对象成员
print(obj.gender)

(4)delattr

delattr(obj,'name')   #delattr删除对象成员

2.从类里拿成员--类也是对象

1 class Foo:
2     stat = '887'
3     def __init__(self,name,age):
4         self.name = name
5         self.age = age
6 g = getattr(Foo,'stat')
7 print(g)

3.从模块里拿东西--模块也是一个对象

1 import test
2 t = getattr(test,'name')  #从模块里拿到一个变量
3 print(t)
4 cls = getattr(test,'Foo')  #从模块里拿到一个类
5 print(cls)
6 obj = cls()
7 print(obj.name)

猜你喜欢

转载自www.cnblogs.com/Finance-IT-gao/p/10547253.html