python-3.x 如何在一行中使用多组括号使类的示例可多次调用

zd287kbt  于 2023-05-02  发布在  Python
关注(0)|答案(1)|浏览(97)

我想实现类'Add',这样就可以使用python中的call方法和继承来返回在单独的一组括号中传递的参数的总和。例如:

>>>Add(10)
10
>>>Add(10)(11)
21
>>>Add(10)(11)(12)
33

我试了这段代码没有收到预期的结果。

class Add():
    def __init__(self, a):
        self.a = a
    def __call__(self, number):
        print(self.a + number)

>>>Add(10)
10
>>>Add(10)(11)
21

但是第三次(Add(10)(11)(12))我收到了错误'int object is not callable.”

k3fezbri

k3fezbri1#

我对你收到的错误消息感到惊讶:int object is not callable.你会得到'NoneType' object is not callable。至少我查你的代码时是这样的
为了实现您想要实现的目标,您需要将示例返回到调用站点,以便您可以再次__call__它。
我建议你这样修改代码:

class Add():
    def __init__(self, a):
        self.a = a
    def __call__(self, number):
        self.a += number # Store the result of your call.
        return self # return the instance back so that you can call it again and again.

你可以像这样使用它:

Add(10)(11)(12) # Returns a instance of Add class.
Add(10)(11)(12).a # fetches the result of your calls.

现在,这将更改Add(10)的原始示例。如果这不是你想要的,你可以用下面的代码替换你的__call__方法:

def __call__(self, number):
    result = self.a + number
    return Add(result)

这样,基本Add示例就不会真正改变。

base = Add(10)
base.a # Would be 10
new_inst = base(11)(12)
new_inst.a # Would be 33
base.a # Would still be 10

相关问题