【发布时间】:2012-11-19 01:47:18
【问题描述】:
我正在学习 Python,我有一个关于从这个类的方法访问类变量的问题,理论多于实践。
例如我们有:
class ExampleClass:
x = 123
def example_method(self):
print(self.x)
为什么一定要准确写self.x,而不仅仅是x? x 属于类的命名空间,使用它的方法也属于它。我错过了什么?这种风格背后的理由是什么?
在 C++ 中你可以这样写:
class ExampleClass {
public:
int x;
void example_method()
{
x = 123;
cout << x;
};
};
它会起作用的!
【问题讨论】:
-
我认为这与范围有关。在模块内部,您可以声明一个“全局”变量并在类声明中调用它,但如果您在类声明中声明某些内容,(显然)它已经被类范围“捕获”,然后需要 self.
-
@senderle 这个问题似乎主要是关于明确传递
self(或者至少这是公认的答案所关注的)。这个问题是关于为什么属性没有隐含的self.。 -
附言。将其命名为“self”只是一种惯例和良好做法,它可以是任何东西,比如独角兽。
-
@delnan,实际上,我认为这两个问题都相当于“为什么有必要准确地写'self.x',而不仅仅是'x'?”但是,如果没有人同意我的观点,那么这不会被关闭:)——我只是想我会提出这是重复的可能性。 (重读另一个问题,我同意这是模棱两可的。)
-
如果你不接受 Bakuriu 的回答,我会追捕你。对设计决策问题有实际答案是多么令人耳目一新。
标签: python oop class namespaces scope