gpt4 book ai didi

python - 对属性的意外名称查找

转载 作者:太空狗 更新时间:2023-10-30 02:42:25 24 4
gpt4 key购买 nike

考虑这段代码:

class Foo(object):
@property
def func(self):
self.__dict__['func'] = 1
return 2

f = Foo()
print f.func
print f.func

它打印2 2。为什么第二次不打印 1

最佳答案

因为 f.func 其中 fFoo 的一个实例,而 func 是一个 属性 描述符触发器

Foo.func.__get__(f)

(参见 Descriptor protocol)。

self.__dict__['func'] = 1 修改 f 实例的底层字典。它不会更改 Foo 类的 func 属性。

Foo.func 优先于 f.func(= 1,新创建的实例变量)因为

If an instance’s dictionary has an entry with the same name as a data descriptor, the data descriptor takes precedence.

(从上面的链接复制)。


如果你想替换属性,你必须给 Foo.func 赋值:

class Foo(object):
@property
def func(self):
Foo.func = 1
return 2

f = Foo()
print(f.func) # 2
print(f.func) # 1

关于python - 对属性的意外名称查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36607488/

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