我有一个与this非常相似的问题,只是我想将我的函数命名为property
例如,我喜欢做一些事情,比如:
class ThingWithProperties(object):
def property(self, a):
print("in property", a)
@property
def test(self):
print("in test")
t = Testing()
t.property(1)
t.test()
但我得到了以下错误:
^{pr2}$有人能解释一下为什么会这样吗?以及如何解决它(而不重命名我的实例方法)?在
之所以会发生这种情况,是因为通过定义一个名为
property
的方法,就可以在类声明的范围内隐藏内置的property
。因此,当您编写@property
时,您的方法被调用来修饰test
,而不是内置的property
。在您可以使用
__builtin__
模块显式使用内置的property
:尽管我个人总是避免隐藏内部构件,即使它们只是在有限的范围内被隐藏,就像这里的情况一样。在
要更清楚地了解“阴影”的情况,请尝试在您的解释器中运行以下命令:
^{pr2}$这里有两点需要说明:首先,有些人可能会惊讶于我们可以在类定义中使用},并且在实际创建类时,您创建的任何变量或函数都会聚集到一个类字典中。在
print
的东西。关键是类定义和其他定义一样是一个代码块,您可以随意编写for
-loops和{第二点是类定义创建了一个新的作用域,并且作用域内的
foo
的值与外部不同。也就是说,上面的打印42
,然后73
,然后42
。在相关问题 更多 >
编程相关推荐