次のクラスがあるとします。
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']}