根据这篇文章
访问 objectname.attributename 时,依次搜索以下对象的属性:
1. 对象本身(objectname.__dict__
或任何 Python 提供的 objectname 属性)。
2. 对象的类型(objectname.__class__.__dict__
)。观察 only__dict__
被搜索,这意味着只有用户提供的类的属性。换句话说objectname.__bases__
,即使objectname.__class__.__bases__
确实存在,也可能不会返回任何东西。
3. 对象类的基础,它们的基础等等。(__dict__
每个objectname.__class__.__bases__
)。多个基础不会混淆 Python,目前不应该关注我们。需要注意的一点是搜索所有碱基,直到找到一个属性。
为了测试我创建了这个例子的理论
class Superb(object):
svar=1
class Sub(Superb):
...
class Leaf(Sub):
def __init__(self):
print(Leaf.svar)
lobj=Leaf()
实例创建工作并打印出 Leaf.svar 的值(如 1)。这意味着在解析 Leaf.svar 时,Python 查看了 Leaf 对象的 base 的 base,这在文章中没有提到。根据文章,搜索对象类(即类型)的基础。我怀疑文章作者是否犯了任何错误,这肯定是我理解上的差距。有人可以澄清一下。