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

在python中的两个对象之间的操作中,谁将操作的重载作为优先级?,python,class,operator-overloading,Python,Class,Operator Overloading,例如,如果我在两个类中定义了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu两个对象,我将对表达式使用哪一个操作定义对于表达式lhs+rhs,Python将首先尝试lhs.\uu添加(rhs),然后是rhs.\uu拉德(lhs)我也不确定,所以我自己尝试了: 然后我现在想起

例如,如果我在两个类中定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
两个对象,我将对表达式
使用哪一个操作定义

对于表达式
lhs+rhs
,Python将首先尝试
lhs.\uu添加(rhs)
,然后是
rhs.\uu拉德(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
>>> 

如果左手对象和右手对象不相关,则左手对象获胜。但是,如果其中一个对象是另一个对象的子类,那么不管它是左手对象还是右手对象,该子类都将获胜

>>> 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
>>> 

左手操作数具有优先级。左手操作数具有优先级。仅当对象不相关时才为真。如果其中一个对象是另一个对象的子类,则子类始终获胜。只有当对象不相关时才是如此。如果其中一个对象是另一个对象的子类,则该子类始终获胜。