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