gevent と greenlet で、トラブルシューティングできない特有の問題に遭遇しました。gevent.Greenlet のサブクラスで便宜上、演算子をオーバーロードしようとしています。
import gevent
class Actor(gevent.Greenlet):
# other stuff..
def __or__(self, other):
print "Hello from or!"
class Echo(Actor):
pass
a = Actor()
b = Echo()
# This works!
print a.__or__(Echo())
# This doesn't!!
print a | b
これは出力です:
$ python gtest.py
Hello from or!
None
Traceback (most recent call last):
File "gtest.py", line 20, in <module>
print a | b
TypeError: unsupported operand type(s) for |: 'Actor' and 'Echo'
のソース コードを見ましたgevent.Greenlet
が、演算子のオーバーロードが許可されない理由がわかりませんでした。メタプログラミングの黒魔術が進行しているように感じます。誰にもアイデアがありますか?