Python“自我”关键字

我是Python新手(通常在C#上工作),在过去的几天里开始使用它。

在一个类中,你需要给这个类的数据成员和方法加上前缀吗? 因此,如果我正在调用一个方法或从该类中获取值,那么我需要使用self.method()或self.intvalue,例如?

我只是想检查一下我没有遇到过的那种冗长的方式。

没有更less的冗长的方式。 总是使用self.x来访问实例属性x 。 请注意,与C ++不同, self不是关键字。 你可以给你的方法的第一个参数任何你想要的名字,但是强烈build议你坚持自己调用它的约定。

我会补充斯文的(准确的)回答,并回答自然的后续问题(即为什么self明示的而不是隐含的?)。

Python以这种方式工作,因为它运行在词汇范围的思想上:裸名称引用将始终引用当前函数定义中的局部variables,包含函数定义的局部variables,模块的全局variables或内置函数。 (作用域是词法的,因为在符号分析过程中遵循分析树,只需要记住从当前函数的path上的函数定义中看到的名称 – 其他任何东西都可以处理为“not seen”,因此全局或者内build“,同样值得注意的是,范围规则与函数定义的嵌套而不是调用相关)。

方法在这方面没有得到任何特别的处理 – 类语句在很大程度上与词法范围规则无关,因为在某些语言中不存在相同的尖锐函数与方法的区别(相反,方法是从函数dynamic创build的相关属性从对象中检索)。

这允许函数在已经被定义的类中被添加到类中,并且与在类声明的主体中定义的那些方法(被称为“monkeypatching”的过程)不可区分。

由于对象命名空间与词法作用域规则是分开的,因此有必要提供其他方法来引用这些属性。 这是明确的self处理的任务。

请注意,对于复杂的algorithm,caching对成员variables的引用作为方法内的局部variables并不罕见。

首先,Python的self不是一个关键字,它是一个编码约定,和Python的cls

Guido写了一篇关于Python对class级支持起源的非常详细和有价值的文章,在那篇文章中,Guido解释了为什么要使用self和为什么是必要的。

请参阅http://python-history.blogspot.com/2009/02/adding-support-for-user-defined-classes.html