0

我来自 javascript 背景,我认为这是我首先提出这个问题的原因。

在方法定义中使用 self 引用类的属性时有什么区别。

例如

class Foo:
  _bar = 15;

  def getBar(self):
    return self._bar;

对比

class Foo:
  _bar = 15;

  def getBar(self):
    return _bar;

我想我可以通过说在引用类中的属性时使用 self 有什么影响来重新表述这个问题。IE 如果出于某种奇怪的原因,我想在getBar()中返回一个全局 _bar 变量,该怎么办?

4

1 回答 1

1

您的第二个代码不返回 class 属性。如果它存在,它将返回全局_bar,否则引发NameError异常。这是因为类作用域不会自动从方法中查找——在查找变量时只查找函数作用域和全局作用域。

return Foo._bar您可以使用或返回一个类属性(即在所有实例之间共享的属性)return self._bar

要返回实例属性,您需要return self._bar

于 2013-09-12T23:11:38.023 回答