您缺少通常行为的关键例外:当右侧操作数是左侧操作数类的子类的实例时,将首先调用右侧操作数的特殊方法。
请参阅以下文档:
http://docs.python.org/reference/datamodel.html#coercion- rules
特别是以下两段:
对于x
和y
,首先 x.__op__(y)
尝试。如果未实现或返回NotImplemented
,请y.__rop__(x)
尝试。如果这也没有实现或返回NotImplemented
,则引发TypeError异常。但是请参见以下异常:
上一项的例外:如果左操作数是内置类型或新样式类的实例,而右操作数是该类型或类的适当子类的实例,并且覆盖基数的__rop__()
方法,则右操作的__rop__()
方法是左操作的尝试过__op__()
的方法。