вызов метода __coerce __ () для производных классов приводит к ошибке - PullRequest
0 голосов
/ 05 февраля 2011

Моя пробная версия была похожа на приведенную ниже, но она не сработала.

class MyNum:
   def __init__(self , n):
   self.n = n

class MyNum2(MyNum):
   def __coerce__(self , y):
        return self, y

   def __radd__(self, y):
        print 'radd called'
        return self.n + y.n

Я набрал в командной строке python:

>>> x = MyNum(20)
>>> y = MyNum2(12)
>>> x+y

Результат:

>>> Traceback (most recent call last):
  File "", line 1, in 
    y+x
  File "", line 3, in __coerce__
    return self.y
AttributeError: MyNum instance has no attribute 'y'

Когда я использую метод __coerce__() без получения класса, результат x+y равно radd called // 32. Однако в производном классе возникает ошибка.

Пожалуйста, помогите мне, и счастливого лунного нового года, заранее спасибо.

1 Ответ

1 голос
/ 05 февраля 2011

На основании сообщения об ошибке ваша реализация __coerce__ фактически имела

return self.y

вместо

return self,y

, как вы написали в примере кода.

Ваш код выше работает для меня, и вам даже не нужен метод __coerce__ здесь.В вашем примере достаточно иметь __radd__.

...