1

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が、演算子のオーバーロードが許可されない理由がわかりませんでした。メタプログラミングの黒魔術が進行しているように感じます。誰にもアイデアがありますか?

4

0 に答える 0