如何为一个类设置多个 init

Moj*_*and -5 python

我想创建一个名为 的类Chain
我希望能够__init__多次调用方法。
例如:

>> Chain(1)
1
>> Chain(1)(2)
3  
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Python中做到这一点?

Sam*_*ord 7

你只需要一个可调用的int

>>> class Chain(int):
...     def __call__(self, other: int) -> Chain:
...         return Chain(self + other)
...
>>> Chain(10) == 10
True
>>> Chain(1)(2)(3)
6
Run Code Online (Sandbox Code Playgroud)


che*_*ner 6

准确地执行您所展示的操作(我质疑其有用性),您需要覆盖__repr__并定义__call__. 例如,

class Chain:
    def __init__(self, x):
        self.x = x

    def __repr__(self):
        return repr(self.x)

    def __call__(self, x):
        return Chain(self.x + x)
Run Code Online (Sandbox Code Playgroud)

由于__call__返回 的新实例Chain,因此您可以无限期地链接调用。

>>> Chain(1)
1
>>> Chain(1)(2)
3
>>> Chain(1)(2)(3)
6
Run Code Online (Sandbox Code Playgroud)

Chain其本身将始终返回 的实例Chain(除非您Chain使用默认的元类以外的元类进行定义type)。Chain.__call__是什么让您可以调用Chain类似函数的实例,返回一个函数以允许实际的调用链继续。__repr__使用以便每次“显示”实例的尝试都会产生其属性的值。