调用方法修改问题

时间:2015-06-26 23:14:12

标签: python class oop call init

根据这个答案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值。

显然我错了,你能告诉我问题在哪里吗?

3 个答案:

答案 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