我正在学习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;
};
};
它将起作用!
摘自Python历史:添加对用户定义类的支持:
相反,我决定放弃隐式引用实例变量的想法。诸如C ++之类的语言使您可以编写this->
foo来显式引用实例变量foo(以防存在单独的局部变量foo)。因此,我决定将此类显式引用作为引用实例变量的唯一方法。另外,我决定将当前对象(“
this”)作为一个特殊的关键字,而不是简单地将“ this”(或其等效)作为第一个命名参数。实例变量总是总是被引用为该参数的属性。使用显式引用,不需要为方法定义使用特殊的语法,也不必担心与变量查找有关的复杂语义。取而代之的是,仅定义一个函数,该函数的第一个参数与实例相对应,按照惯例,该实例称为“
self”。例如:def spam(self,y): print self.x, y
这种方法类似于我在Modula-3中看到的方法,该方法已经为我提供了导入和异常处理的语法。Modula-3没有类,但是它允许您创建包含完全类型化函数指针成员的记录类型,这些成员默认情况下初始化为附近定义的函数,并添加语法糖,以便如果x是这样的记录变量,而m是一个该记录的函数指针成员,初始化为函数f,然后调用xm(args)等效于调用f(x,args)。这与对象和方法的典型实现相匹配,并使得可以将实例变量与第一个参数的属性等同起来。
因此,由BDFL自己说,他决定使用显式自我而不是隐式自我的唯一真实原因是:
编辑:Python FAQ中也有一个答案。
我知道这个话题听起来像是重复的,但我并不是想在这里调试这个问题,而是想绕过它。 我的程序应该做的是:对于文件夹中的每个文件,创建一个新按钮。如果您单击此按钮,请输入您刚输入的文件夹的名称。 现在我遇到的问题是,“fileName”变量需要放在final中,因为Java提供的是对象的指针,而不是值本身。但如果我这样做,则只会为任何按钮发送最后选择的文件名。
我正在做下面这样的事情,但它不起作用。为什么?又是如何做到的呢?
我正在尝试让一个按钮将其值与其他变量进行比较。在onClick方法中,我收到一个错误,说变量在内部类中被访问,需要声明为最终变量。问题是变量应该被更改,所以我无法使其成为最终变量。我如何解决这个问题?这是我的代码:
我在中发现了一个编译错误。 代码是这样的。
我正在尝试创建一个布局为“是”或“否”的警报对话框。我想通过单击“否”按钮而不是对话框视图来关闭该对话框。Disclose() 有错误。 这是我的密码。
问题内容: 因此标题说明了一切。我的内出现编译错误。 这是代码。 问题答案: 如果您不想使其最终确定,则始终可以将其设为全局变量。