我开始知道我们也可以在没有实现__call__()
函数的情况下使类成为可调用的,我正在尝试编写类似的东西但是我被卡住了:下面是我的代码
class neg:
def __init__(self): # Classes are callables too
self.val = 54545
def __repr__(self):
return str(self.val)
if __name__=='__main__':
x=neg
print(x) #print(neg()) also shows nothing
#added by Merlin
print('value of x:', x )
执行上述操作无效,它无法打印,我在这里缺少什么?
我读取的示例使类可调用:
class Negate:
def __init__(self, val): # Classes are callables too
self.val = -val # But called for object, not work
def __repr__(self): # Instance print format
return str(self.val)
actions = [square, sobject, pobject.method, Negate] # Call a class too
for act in actions:
print(act(5))
我修复了它确实有用的主要部分,但是当他们说一个类是可调用的时候 然后它不应该
neg()
不是吗?
答案 0 :(得分:1)
您需要创建该类的实例才能运行__init__
方法。而且你还需要确保你的程序启动。通过编写do_something()
来调用/实例化一个函数;你通过写neg()
来打电话给一个班级。
if __name__ == '__main__': # Fix the main so program starts
x = neg() # Call the class!
print(x)
看到你评论说你需要打电话"这堂课,你试过试试吗?你应该得到答案。看一下shell:
>>> neg
<class __main__.neg at 0x103842db8>
>>> neg()
5435 # Displays the __repr__ return value.
无论您是在撰写函数还是编写课程,都不需要实施__call__
,除非您正在做复杂的事情。请找一些教程或阅读文档。
答案 1 :(得分:0)
课程是可以调用的,只有在您调用&#34;用于创建类实例的类。使用括号和可选参数调用具有与调用函数相同语法的类。这与调用无关,只会影响实例。