# __pragma__ ('opov')
class Obj:
def __init__(self, x, y):
self.x = x
self.y = y
self._message = None
def __str__(self):
return 'obj'
def __add__(self, other):
self._message = 'obj.__add__'
return (self.x + other[0], self.y + other[1])
def __sub__(self, other):
self._message = 'obj.__sub__'
return (self.x - other[0], self.y - other[1])
def __radd__(self, other):
self._message = 'obj.__radd__'
return (other[0] + self.x, other[1] + self.y)
def __rsub__(self, other):
self._message = 'obj.__rsub__'
return (other[0] - self.x, other[1] - self.y)
@property
def message(self):
message = self._message
self._message = None
return message
obj = Obj(4, 2)
_tuple = (4, 2)
_list = [4, 2]
print('obj + tuple:', obj + _tuple, '\t\tcalled:', obj.message)
print('obj - tuple:', obj - _tuple, '\t\tcalled:', obj.message)
print('tuple + obj:', _tuple + obj, '\tcalled:', obj.message)
print('tuple - obj:', _tuple - obj, '\t\tcalled:', obj.message)
print('obj + list:', obj + _list, '\t\tcalled:', obj.message)
print('obj - list:', obj - _list, '\t\tcalled:', obj.message)
print('list + obj:', _list + obj, '\tcalled:', obj.message)
print('list - obj:', _list - obj, '\t\tcalled:', obj.message)
obj + tuple: (8, 4) called: obj.__add__
obj - tuple: (0, 0) called: obj.__sub__
tuple + obj: [4, 2, obj] called: None
tuple - obj: (0, 0) called: obj.__rsub__
obj + list: (8, 4) called: obj.__add__
obj - list: (0, 0) called: obj.__sub__
list + obj: [4, 2, obj] called: None
list - obj: (0, 0) called: obj.__rsub__
There is an apparent problem with
tuple + objandlist + objexpressions. Rather than callobj.__radd__, it seems thattuple.__add__/list.__add__are called. Similar problem occurs withtuple * objandlist * obj. Problem appears to stem from the fact that tuple and list have__add__and__mul__methods that seem to take priority.python code:
console output:
env: Python3.9 venv with pip install Transcrypt
testing: Firefox version 133 in Linux