# coding: utf-8
class A(object):
a = "A.class"
def __init__(self):
self.a = "A.instance"
pass
def __getattribute__(self, item):
return "A.__getattribute__"
def __getattr__(self, item):
return "A.__getattr__"
class B(A):
a = "B.class"
def __init__(self):
super(B, self).__init__()
self.a = "B.instance"
pass
def __getattribute__(self, item):
return "B.__getattribute__"
def __getattr__(self, item):
return "B.__getattr__"
inst = B()
print inst.a
子類父類所有獲取屬性的方法都在時,最先調(diào)用的是當(dāng)前類的
__getattribute__方法,依次注釋當(dāng)前調(diào)用到的方法,查看下一個調(diào)用的方法是什么,出現(xiàn)的順序如下所示:
B.__getattribute__A.__getattribute__B.instanceA.instanceB.classA.classB.__getattr__A.__getattr__AttributeError: 'B' object has no attribute 'a'