2024-03-29 13:20:32 发布
网友
例如,如果我在两个类中定义了__add__和{},并且我对这两个对象求和,python将使用哪个操作定义?在
__add__
对于表达式lhs + rhs,Python将首先尝试lhs.__add__(rhs),然后rhs.__radd__(lhs)。在
lhs + rhs
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
那我现在就记得规则了。在
对于表达式
lhs + rhs
,Python将首先尝试lhs.__add__(rhs)
,然后rhs.__radd__(lhs)
。在如果左右手的物体不相关,那么左手的物体获胜。但是,如果其中一个对象是另一个对象的子类,那么不管它是左手对象还是右手对象,子类都会获胜。在
我也不确定,所以我自己试试看:
那我现在就记得规则了。在
相关问题 更多 >
编程相关推荐