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

 

posted @ 2021-03-03 18:41  XiaoLee-C  阅读(199)  评论(0编辑  收藏  举报