在python中两个对象之间的操作中,该对象的重载作为优先级?

2024-03-29 13:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,如果我在两个类中定义了__add__和{},并且我对这两个对象求和,python将使用哪个操作定义?在


Tags: 对象add定义
3条回答

对于表达式lhs + rhs,Python将首先尝试lhs.__add__(rhs),然后rhs.__radd__(lhs)。在

如果左右手的物体不相关,那么左手的物体获胜。但是,如果其中一个对象是另一个对象的子类,那么不管它是左手对象还是右手对象,子类都会获胜。在

>>> class Foo(object):
...   def __add__(self, rhs):
...     print('foo.add')
...   def __radd__(self, rhs):
...     print('foo.radd')
... 
>>> class Bar(Foo):
...   def __add__(self,rhs):
...     print('bar.add')
...   def __radd__(self, rhs):
...     print('bar.radd')
... 
>>> a=Foo()
>>> b=Bar()
>>> a+b
bar.radd
>>> b+a
bar.add
>>> 

我也不确定,所以我自己试试看:

In [84]: class Foo(object):
    ...:     def __add__(self, rhs):
    ...:         print 'foo.add'
    ...:         
    ...: class Bar(object):
    ...:     def __radd__(self, lhs):
    ...:         print 'bar.radd'
    ...: 
    ...: f=Foo(); b=Bar()
    ...: f+b
    ...: 1+b
foo.add
bar.radd

那我现在就记得规则了。在

相关问题 更多 >