python 魔术方法__getatrr__
__getatrr__(self,para):在查找对象的某个属性时,如果没有这个属性,就会去调用__getatrr__方法
测试一下:
class test_getattr(): sex = "male" def getName(self): print self.name def __getattr__(self,para): print para print "找不到某个属性的时候,才调用我" self.name = "小明" self.getName() test = test_getattr() print "test.name输出:" test.name print "test.sex输出:" print test.sex
生成test对象时,对象中只有一个公共类属性,sex。test.name即当我们查找name属性时,test中并没有这个属性,所以调用到__getattr__(self,para)中。继而打印出
name
找不到某个属性的时候,才调用我
小明
其中,name 是通过test.name 的方式传给__getattr__(self,para)的,self(也就是对象test)是不需要显示传入的,para形参对应的是name这个属性key。所以第一行打印print para 会打印出name属性key,然后就是函数的顺序调用了。
另外,print test.sex 查找sex属性时,对象有这个属性,就不会调用 __getattr__(self,para)了,找到sex后 打印出来即可所以 打印出
male
整个模块的输出是:
test.name输出:
name
找不到某个属性的时候,才调用我
小明
test.sex输出:
male