說我已經建立了包含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__
方案解決了這個問題。但是這似乎引起了一些頭痛(考慮到有關這個問題的問題和問題的數量)。還有其他的最佳做法嗎?
你是否也希望使用現有的類? –
雖然你的問題很有意思,但缺乏細節。你能否描述期望行爲的更多方面? –