Учитывая следующий класс:
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']}