gpt4 book ai didi

Python对象属性搜索机制

转载 作者:行者123 更新时间:2023-11-30 23:36:56 25 4
gpt4 key购买 nike

根据this article

When accessed objectname.attributename, the following objects are searched in sequence for the attribute:

1.对象本身( objectname.__dict__ 或任何 Python 提供的对象名属性)。

2.对象的类型 ( objectname.__class__.__dict__ )。仅观察__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 对象的基的基的基,这不是文章中提到的内容。根据文章,搜索对象类的基础(即类型)。我怀疑文章作者犯了任何错误,这肯定是我的理解上的差距。有人可以澄清一下吗?

最佳答案

这篇文章掩盖了一些细节。当您有这样的问题时,是时候求助于权威来源了,在本例中是《Python 语言引用》第 3.2. The standard type hierarchy 部分。 ,其中包含一个类条目,其中指出(我的重点):

A class has a namespace implemented by a dictionary object. Class attribute references are translated to lookups in this dictionary, e.g., C.x is translated to C.__dict__["x"] (although for new-style classes in particular there are a number of hooks which allow for other means of locating attributes). When the attribute name is not found there, the attribute search continues in the base classes.

这描述了类的属性查找,而不是类实例,我相信它解释了代码中发生的情况。

为了完整起见,下面是关于类实例的下一个条目:

A class instance has a namespace implemented as a dictionary which is the first place in which attribute references are searched. When an attribute is not found there, and the instance’s class has an attribute by that name, the search continues with the class attributes.

我将“搜索继续使用类属性”理解为“重复为类指定的过程”,即搜索基类。如果不这样做,继承的用处就会大大降低!

您链接到的文章解释了类实例的属性查找,但没有说明类的属性查找。因为事实并非如此,所以给人的印象是它的工作方式相同,但事实并非如此。

关于Python对象属性搜索机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com