【问题标题】:calling __coerce__() method on derived classes results in an error在派生类上调用 __coerce__() 方法会导致错误
【发布时间】:2011-06-21 18:41:02
【问题描述】:

我的试用版如下所示,但没有成功。

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(最近一次通话最后一次): 文件“”,第 1 行,在 y+x 文件“”,第 3 行,在 __coerce__ 返回self.y AttributeError:MyNum 实例没有属性“y”

当我在没有类派生的情况下使用__coerce__() 方法时,结果 x+y 等于 radd called // 32。但是,对于派生类,会发生错误。

请给我一些帮助,农历新年快乐,提前谢谢你。

【问题讨论】:

    标签: python inheritance derived-class coerce


    【解决方案1】:

    根据错误消息,您的 __coerce__ 实现实际上有

    return self.y

    而不是

    return self,y

    正如您在示例代码中所写的那样。

    您上面的代码对我有用,实际上您甚至不需要这里的__coerce__ 方法。在您的示例中,只需 __radd__ 就足够了。

    【讨论】:

    • 我做了这些示例代码进行实验。这是我第一次使用 _coerce_ 方法作为运算符覆盖。无论如何,谢谢你,shang(^-^),你是对的。我的代码的唯一问题是 ',' !!
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2013-07-17
    相关资源
    最近更新 更多