根据这个答案Change attribute after each object calling,我认为call方法应该在每次调用时对其实例执行某些操作。我试图在我的代码中使用它,但我在某处错了。
class switcher():
current_index = -1
def __call__(self):
self.current_index +=1
sw = switcher()
print sw.current_index
print sw.current_index
输出: -1
输出: -1
我认为它应该归还:
输出: 0
输出 1
因为每次调用 sw 实例时它都会增加current_index
值。
显然我错了,你能告诉我问题在哪里吗?
答案 0 :(得分:2)
我不知道你真正想做什么,但你需要实际调用你没有做的实例:
while all(str.isalpha(split) for split in name.split()):
# code...
sw = switcher() # creates instance, does not call __call__ in your class
sw() # call/increment calling the instance
print(sw.current_index)
sw() # call/increment calling the instance
print(sw.current_index)
0 # after first sw() call
1 # after second sw() call
使您的实例可调用,如果您不调用该实例,则它不会执行任何操作。创建实例与__call__
您链接的答案中的属性方法似乎就是您要做的事情。
答案 1 :(得分:1)
首先:current_index属性属于该类,而不是您需要的对象实例。 你需要在
中分配它__init__(self)
第二:调用对象实例,如上一个答案中所述。
答案 2 :(得分:1)
您不理解构造函数和类的调用方法之间的区别:
__init__ := 'instance is created when class is invoked, Switcher()'
__call__ := 'func is executed when instance is invoked, switcher()'
class Switcher():
def __init__(self):
self.current_index = -1
def __call__(self):
self.current_index += 1
switcher = Switcher() # instance created calling __init__ -> current_index = -1
switcher() # instance just been invoked, calling __call__ -> current_index = 0