说我已经建立了包含Foo
类库,支持一些神奇的方法,说__add__()
和__radd__()
:python中是否有可扩展的魔术方法的最佳实践?
>>> class Foo(object):
... def __add__(self, rhs):
... print("Foo.__add__", rhs)
... def __radd__(self, lhs):
... print("Foo.__radd__", lhs)
...
>>> foo = Foo()
>>> foo + 3
Foo.__add__ 3
>>> 3 + foo
Foo.__radd__ 3
当计算3 + foo
,蟒蛇首先调用type(3).__add__(3, foo)
,但截至返回NotImplemented
,它回落到type(foo).__radd__(foo, 3)
:
>>> type(3).__add__(3, foo)
NotImplemented
我希望开发者能够建立在我的库顶库,说含有类库,我希望他们有完全的控制权。特别是,我想实施一些机制,让其他图书馆可以决定foo + bar
是否应拨打foo.__add__(bar)
或bar.__radd__(foo)
。
我看到NumPy使用__array_priority__
方案解决了这个问题。但是这似乎引起了一些头痛(考虑到有关这个问题的问题和问题的数量)。还有其他的最佳做法吗?
你是否也希望使用现有的类? –
虽然你的问题很有意思,但缺乏细节。你能否描述期望行为的更多方面? –