小编Zha*_*iel的帖子

Python dunder 方法包​​装为属性

我偶然发现了这段代码,我觉得很奇怪,因为它似乎违反了 python 内置函数直接从对象的类调用 dunder 方法的事实。举__call__个例子,如果我们定义类A如下:

\n
class A:\n    @property\n    def __call__(self):\n        def inner():\n            return 'Called.'\n        return inner\n\na = A()\na() # return 'Called.'\n\ntype(a).__call__(a) # return 'property' object is not callable. \n
Run Code Online (Sandbox Code Playgroud)\n

然而,这种行为似乎与Python官方文档中所说的相矛盾:

\n
\n

object.__call__(self[, args...])当实例\xe2\x80\x9c称为\xe2\x80\x9d\nas函数时调用;如果定义了此方法,则x(arg1, arg2, ...)大致\n转换为type(x).__call__(x, arg1, ...).

\n
\n

谁能解释一下这是怎么回事?

\n

python python-datamodel python-descriptors

6
推荐指数
1
解决办法
89
查看次数