此问题在此处已有答案:
Operator overloading in Python: handling different types and order of parameters [duplicate](2个答案)
昨天就关门了。
我了解__truediv__
的工作原理,每个this answer。
但在这种情况下:
>>> from pathlib import Path
>>> 'foo' / Path('bar')
PosixPath('foo/bar')
字符串
当然,__truediv__
是在str
上调用的,因为'foo'
是/
的左操作数,在这种情况下,它如何返回Path
?
1条答案
按热度按时间k5hmc34c1#
这里有一个玩具路径-称之为ploth。它实现了
__rtruediv__
和__truediv__
,所以你可以用它来做除法。因为str
既不实现__rtruediv__
也不实现__truediv__
,所以Ploth
可以做这件事。(我只是从str
派生来获得一个方便的构造函数和__repr__()
。)字符串
这将输出:
型
来自
__rtruediv__
上的Python文档:调用这些方法来实现二进制算术运算(
+
,-
,*
,@
,/
,//
,%
,divmod()
,pow()
,**
,<<
,>>
,&
,^
,|
)。只有当左操作数不支持相应的操作并且操作数的类型不同时,才会调用这些函数。