Aar*_*all 25 python class call
这是受到我刚刚看到的一个问题的启发,"通过调用类实例来更改返回的内容",但很快得到了回答__repr__(并且被接受,因此提问者实际上并不打算调用该实例).
现在调用类的实例可以这样做:
instance_of_object = object()
instance_of_object()
Run Code Online (Sandbox Code Playgroud)
但我们会得到一个错误,比如TypeError: 'object' object is not callable.
所以为了确保我们在Stackoverflow上有这个问题:
你如何在Python中实际调用类的实例?
Aar*_*all 45
您可以调用类的实例,如下所示:
o = object() # create our instance
o() # call the instance
Run Code Online (Sandbox Code Playgroud)
但这通常会给我们一个错误.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'object' object is not callable
Run Code Online (Sandbox Code Playgroud)
我们如何按预期调用实例,并从中获得一些有用的东西?
我们必须实现Python特殊方法,__call__!
class Knight(object):
def __call__(self, foo, bar, baz=None):
print(foo)
print(bar)
print(bar)
print(bar)
print(baz)
Run Code Online (Sandbox Code Playgroud)
实例化类:
a_knight = Knight()
Run Code Online (Sandbox Code Playgroud)
现在我们可以调用类实例:
a_knight('ni!', 'ichi', 'pitang-zoom-boing!')
Run Code Online (Sandbox Code Playgroud)
打印:
ni!
ichi
ichi
ichi
pitang-zoom-boing!
Run Code Online (Sandbox Code Playgroud)
我们现在已经成功地称之为班级的一个实例!