- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
> TypeError: '-6ren">
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/
这个问题已经有答案了: What is PECS (Producer Extends Consumer Super)? (16 个回答) 已关闭 3 年前。 根据我的理解(显然需要更正), map 应
class A: @property def p(self): return 2 def q(self): return 2 a = A() A.p(a) #>> TypeError: '
在 Java 中,人们经常将接口(interface)与类一起定义,并在可能的情况下使用接口(interface)名称而不是类名称,以便以后允许新的实现。这里的逻辑接口(interface)是重复的。
所以基本上在我的应用程序委托(delegate)中我有一个 navigation.controller 此导航 Controller 有一个名为 MainScreen 的类的 View 。 在 Mai
这个问题结合了unique_ptr as class member and move semantics fail to compile with clang和 C++ std::vector in
尝试编写 python 包,但无法在我的源文件之一中创建类的实例。 包布局是: -packagedir ----README.md ----setup.py ----packagename -----
我在 springboot 中使用 @Cacheable 并实现 Cache 接口(interface),覆盖以下函数: public String getName() public Object
这个问题在这里已经有了答案: How do I resolve "ambiguous use of" compile error with Swift #selector syntax? (3 个答
谁能告诉我 我使用这个方法“[aClass respondsToSelector:@selector(fun)]”来查找任何类(class)中是否有乐趣 但是当 fun 有三个参数时我该如何处理呢??
我是一名优秀的程序员,十分优秀!