"operator.__inv__"存在的目的是什么?



invinvert有什么区别?

>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False

我认为__invert__是像~1(1).__invert__()这样的一元操作的钩子。

但是另一个__inv__对应什么?或者如果它是相同的,为什么我们添加了另一个名称和不同的函数来做同样的事情?

两者都表示相同的运算符。在 Python 2.0 中添加了长拼写,并且从未删除短拼写。

operator.inv(obj)

operator.invert(obj)

operator.__inv__(obj)

operator.__invert__(obj)

返回数字obj的按位逆运算。 这相当于~obj.

版本 2.0 中的新功能:名称invert()__invert__()

来源:Python 2operator文档。

它们作为不同的对象实现,因为它们的表示形式反映了名称。请注意,相应的 dunder 和常规名称确实共享相同的表示和对象。

>>> operator.__inv__
<built-in function inv>
>>> operator.__invert__
<built-in function invert>
>>> operator.__inv__ is operator.inv
True
>>> operator.__invert__ is operator.invert
True

从历史上看,这两个名称同样可行 - Python 1operator模块使用inv/__inv__名称,而 Python 1 数据模型使用特殊方法__invert__名称。

相关内容

最新更新