【发布时间】:2015-08-22 00:06:07
【问题描述】:
这很有效,可以愉快地打印 81:
class X:
mypow = pow
print(X().mypow(3, 4))
但是为什么呢?该方法不是给出了额外的“自我”参数,应该完全混淆吗?
为了比较,我也用自己的Pow函数试了一下:
def Pow(x, y, z=None):
return x ** y
class Y:
myPow = Pow
print(Pow(3, 4))
print(Y().myPow(3, 4))
直接函数调用打印 81 并且方法调用按预期崩溃,因为它确实获得了额外的实例参数:
Python 3: TypeError: unsupported operand type(s) for ** or pow(): 'Y' and 'int'
Python 2: TypeError: unsupported operand type(s) for ** or pow(): 'instance' and 'int'
Python 拥有的pow 为什么/如何在这里工作? The documentation 没有帮助,我找不到源。
【问题讨论】:
-
以同样的方式传递给我的
Pow? @PadraicCunningham -
这是因为内置函数的
__self__属性不可写,所以pow总是None。 -
@vaultah 在 Python 2 中尝试。
-
@AshwiniChaudhary 谢谢,我正在调查
__self__,还不知道。