> TypeError: '-6ren">
gpt4 book ai didi

python - 为什么 "aClass.aProperty"不可调用?

转载 作者:太空狗 更新时间:2023-10-29 18:19:26 26 4
gpt4 key购买 nike

class A:
@property
def p(self): return 2

def q(self): return 2

a = A()
A.p(a) #>> TypeError: 'property' object is not callable

A.q(a) #>> no error, returns 2

这是为什么?我知道如果我在 instance 上引用属性:a.p 只会返回方法返回值,但我试图从类上的属性开始。我预计上面没有错误,两者都评估为 2。

最佳答案

您正在挖掘 descriptors 的世界. A.p 是一个属性,属性是描述符。这是一个具有神奇方法(__get____set__ ...)的类,当在实例 上访问描述符时会调用这些方法。访问的特定方法当然取决于它的访问方式。访问上的描述符只会返回描述符本身,不会执行任何魔法——在这种情况下,property 描述符不可调用,因此您会得到一个错误。

注意如果调用 __get__ 会发生什么:

class A(object):
@property
def p(self):
return 2

a = A()
print (A.p.__get__(a)) #2

foo = A.p.__get__(a) 是当您执行 foo = a.p 时实际发生的事情。我觉得这很漂亮...

关于python - 为什么 "aClass.aProperty"不可调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369051/

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