我想创建一个名为 的类Chain。
我希望能够__init__多次调用方法。
例如:
>> Chain(1)
1
>> Chain(1)(2)
3
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中做到这一点?
你只需要一个可调用的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)
要准确地执行您所展示的操作(我质疑其有用性),您需要覆盖__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__使用以便每次“显示”实例的尝试都会产生其属性的值。
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |