我是Python新手(通常使用C#),在过去几天开始使用它.
在一个类中,您是否需要对该类数据成员和方法的任何调用加前缀?那么,如果我正在调用一个方法或从该类中获取一个值,那么我需要使用self.method()
或者self.intvalue
,例如?
我只是想检查一下我还没有遇到过那种冗长的方式.
Sve*_*ach 123
有着冗长的方式.始终用于self.x
访问实例属性x
.请注意,与this
C++ 不同,self
它不是关键字.您可以为您的方法的第一个参数指定您想要的任何名称,但强烈建议您坚持调用它的惯例self
.
nco*_*lan 54
我将补充斯文(准确)的回答,并回答自然的后续问题(即为什么是self
明确的而不是隐含的?).
Python以这种方式工作,因为它操作词法范围的概念:裸名称引用将始终引用当前函数定义中的局部变量,包含函数定义的局部变量,模块的全局变量或内置.(范围界定是词法,因为在符号分析期间跟随解析树时,您只需要记住在当前函数的路径上的函数定义中看到的名称 - 其他任何东西都可以处理为"未见",因此全局或者内置".值得明确指出,范围规则与函数定义的嵌套有关,而不是与调用有关.
在这方面没有给出任何特殊的特殊处理方法 - 类语句在很大程度上与词法范围规则无关,因为在某些语言中存在与方法区别相同的尖锐功能(相反,方法是从函数动态创建的.从对象中检索相关属性).
这允许函数在已经定义之后添加到类中,并且与在类语句的主体内定义的那些方法(称为"monkeypatching"的过程)无法区分.
由于对象命名空间与词法范围规则是分开的,因此有必要提供一些其他方法来引用这些属性.这是显式处理的任务self
.
请注意,对于复杂算法,将成员变量的引用缓存为方法中的局部变量并不罕见.
首先,Python self
不是关键字,它是一种编码约定,与Python相同cls
.
圭多已经撰写了有关Python的类支持原点的真正详细和贵重物品,而该文章中,圭多解释了为什么使用self
和cls
,为什么他们是必要的.
请参阅http://python-history.blogspot.com/2009/02/adding-support-for-user-defined-classes.html.
归档时间: |
|
查看次数: |
58960 次 |
最近记录: |