我来自javascript背景,我认为这是我首先提出这个问题的原因。
使用self在方法定义中引用类的属性时是否有任何区别。
E.G。
class Foo:
_bar = 15;
def getBar(self):
return self._bar;
VS
class Foo:
_bar = 15;
def getBar(self):
return _bar;
我想我可以通过说出在引用类中的属性时使用self的效果来重新解释这个问题。 I.E.如果由于某些奇怪的原因,我想在 getBar()中返回一个全局_bar变量,该怎么办?
答案 0 :(得分:1)
您的第二个代码不会返回class属性。它将返回全局_bar
(如果存在),否则将引发NameError
异常。这是因为类范围不会自动从方法中查找 - 在查找变量时只查找函数范围和全局范围。
您可以使用return Foo._bar
或return self._bar
返回类属性(即在所有实例之间共享的属性)。
要返回实例属性,您需要return self._bar