【发布时间】:2018-07-05 19:55:52
【问题描述】:
我试图了解 Python 中的“可调用对象”是什么以及可调用的类意味着什么。我正在使用以下代码:
class A(object):
def __init__(self):
pass
print("Is A callable? " + str(callable(A)))
a=A()
print("created a")
a()
这给出了以下结果:
Is A callable? True
created a
Traceback (most recent call last):
File "test2.py", line 11, in <module>
a()
TypeError: 'A' object is not callable
此外,
print(type(A.__call__()))
给予:
<class '__main__.A'>
这是否意味着 A 类有一个__call__ 方法?为什么它是类型类?
每次我用 A() 实例化时都会调用 A.__call__() 吗?
【问题讨论】:
-
您希望
a()做什么?前者是可调用的,因为它在调用时委托给构造函数。您尚未指定允许类的实例可调用的行为,这就是后者失败的原因。 -
在 Python 中,一切都是对象。如果一个对象具有
__call__方法,那么它就是callaballe。方法也是对象,所以__call__本身有一个__call__方法。 -
我认为标记为重复的问题不能直接回答这个问题。 (从那里的答案中可以理解理解)。
-
为什么你认为做
A()和做a()之间有关系?