Nigdy wcześniej nie operowałem operatorami odwrotnymi, więc proszę nie płonąć! Właśnie skończyłem się uczyć o nich, więc chciałem je wypróbować. Ale z jakiegoś powodu nie działa. Oto kod:Używanie operatorów odwrotnych w Pythonie
>>> class Subtract(object):
def __init__(self, number):
self.number = number
def __rsub__(self, other):
return self.number - other.number
>>> x = Subtract(5)
>>> y = Subtract(10)
>>> x - y # FAILS!
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
x - y
TypeError: unsupported operand type(s) for -: 'Subtract' and 'Subtract'
>>> x.__rsub__(y) # WORKS!
-5
Jeśli zmienię __rsub__
do __sub__
, to działa.
Co robię źle? Jaki jest cel tych operatorów odwrotnych?
Ale w jaki sposób działa wywołanie '__rsub__'? – Randy
Ponieważ '__rsub__' jest zdefiniowaną funkcją i można ją nazwać jak każdą inną funkcję; po prostu nie będzie automatycznie wywoływany do implementacji operatora '-'. – geoffspear
@Randy: Ponieważ kiedy nazywasz to jawnie, jest to zwykła metoda. Dlaczego miałbyś oczekiwać, że to nie zadziała? Jedyną rzeczą wyróżniającą '__rsub__' jest to, że w pewnych okolicznościach Python przetłumaczy operację odejmowania' - 'na wywołanie' __rsub__' - ale jak wyjaśniono w odpowiedziach, te pewne okoliczności nie występują w twój przykład. –