目录
__setattr__、__delattr__、__getattr__方法
反射是什么?
反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力,在python中一切皆对象(类,实例,模块等等都是对象),那么我们就可以通过反射的形式操作对象相关的属性。
Python中的反射主要方法:
1.hasattr(object,name)
判断对象中有没有一个name字符串对应的方法或属性
2.getattr(object, name, default=None)
获取对象name字符串属性的值,如果不存在返回default的值
3.setattr(object, key, value)
设置对象的key属性为value值,等同于object.key = value
4.delattr(object, name)
删除对象的name字符串属性
方法的使用
class Map:
f1 = '召唤师峡谷'
def __init__(self,name,addr):
self.name = name
self.addr = addr
def from1(self):
print('%s来自%s'%(self.name,self.addr))
def from2(self):
print('%s选手是%s'%(self.addr,self.name))
b1 = Map('盖伦','上路')
#检测是否含有某属性;
print(hasattr(b1,'name')) #True
print(hasattr(b1,'from1')) #True
#获取属性;
n = getattr(b1,'name')
print(n) #盖伦
func = getattr(b1,'from1')
func() #盖伦来自上路
#getattr(b1,'abcsdf') #报错
print(getattr(b1,'xxxxxxx','不存在')) #不存在
#设置属性;
setattr(b1,'ADC','下路')
print(b1.__dict__) #{'name': '盖伦', 'addr': '上路', 'ADC': '下路'}
setattr(b1,'贵族','VN'+'奥巴驴')
print(b1.__dict__) #{'name': '盖伦', 'addr': '上路', 'ADC': '下路', '贵族': 'VN奥巴驴'}
#删除属性
delattr(b1,'addr')
print(b1.__dict__) #{'name': '盖伦', 'ADC': '下路', '贵族': 'VN奥巴驴'}
delattr(b1,'ADC')
print(b1.__dict__) #{'name': '盖伦', '贵族': 'VN奥巴驴'}
类也是对象
class Foo(object):
test = 'hello world!'
def __init__(self):
self.name = 'xuan'
de