错误示例:
class Person(object):
def __getattribute__(self,obj):
print("---test---")
if obj.startswith("a"):
return "hahha"
else:
return self.test
def test(self):
print("heihei")
t.Person()
t.a #返回hahha
t.b #会让程序死掉 #原因是:当t.b执⾏时,会调⽤Person类中定义的__getattribute__⽅法,但是在这个⽅法的执⾏过程中
#if条件不满⾜,所以 程序执⾏else⾥⾯的代码,即return self.test 问题就在这,因为return 需要把 #self.test的值返回,
#那么⾸先要获取self.test的值,因为self此时就是t这个对象,所以self.test就是 t.test 此时要获取t这个对象的test属性,那么就会
#跳转到__getattribute__⽅法去执⾏,即此时产⽣了递归调⽤,由于这个递归过程中 没有判断什么时候退出,所以这个程序会永⽆休⽌的运⾏
#下去,⼜因为 每次调⽤函数,就需要保存⼀些数据,那么随着调⽤的次数越来越多,最终内存吃光,所以程序崩溃
注意:以后不要在__getattribute__⽅法中调⽤self.xxxx