gpt4 book ai didi

Python 双下划线修改

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:48 25 4
gpt4 key购买 nike

我对这种行为有点困惑(使用 python 3.2):

class Bar:
pass

bar = Bar()
bar.__cache = None
print(vars(bar)) # {'__cache': None}

class Foo:
def __init__(self):
self.__cache = None

foo = Foo()
print(vars(foo)) # {'_Foo__cache': None}

我已经阅读了一些有关双下划线如何导致属性名称被“损坏”的内容,但我预计在上述两种情况下都会出现相同的名称损坏。

What is the meaning of a single- and a double-underscore before an object name?

知道这里发生了什么吗?

最佳答案

名称修改发生在class语句的评估过程中。对于 Bar 来说,__cache 属性并未定义为类的一部分,而是事后添加到特定对象中。

(实际上,这可能不完全正确。在 __new__ 方法求值期间可能会发生名称修改;我不知道。但无论如何,您的 __cache 是显式添加到单个对象,而不是通过类代码添加。)

关于Python 双下划线修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59246694/

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