gevent不能重载Greenlet子类的运算符

2024-06-02 12:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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的源代码,但不明白为什么它不允许运算符重载。我觉得有一些元编程的黑魔法正在进行。有人有主意吗?你知道吗


Tags: orfrompyechohellogevent运算符this