0

次のクラスがあるとします。

import operator
class Foo(object):
    def __init__(self, bah):
        self.bah = bah      

    def __invert__(self):
        return {'not': self.bah}

    def __repr__(self):
        return self.bah

    def __or__(self, other):
        return {'or': [self.bah, other]}    


x = Foo('obj1')
y = Foo('obj2')

できます:

operator.inv(x) # ~x

それは私に与える:

{'not': 'obj1'}

できます:

operator.or_(x, ~y) # x | ~y

それは私に与える:

{'or': ['obj1', {'not': 'obj2'}]}

しかし、なぜ私はできないのですか:

operator.or_(~x, y) # ~x | y

次のエラーがスローされます。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-175-92fdd35dc3b3> in <module>
----> 1 operator.or_(~x, y)

TypeError: unsupported operand type(s) for |: 'dict' and 'Foo'

そして、どうすれば次のように出力できますか?

{'or': [{'not': 'obj1'}, 'obj2']}
4

3 に答える 3