可能重复:
Python 'self' 解释
我是编程和python的新手。我理解self
在类方法中使用和声明类变量,但是,我的问题是:为什么不self
用于在类方法之外声明变量? .
可能重复:
Python 'self' 解释
我是编程和python的新手。我理解self
在类方法中使用和声明类变量,但是,我的问题是:为什么不self
用于在类方法之外声明变量? .
self
不用于在任何地方声明变量。self
是方法的第一个参数的常用名称,因为该方法接收它绑定到的实例作为每个调用的第一个参数。
它没有在“其他地方”使用,因为它仅适用于存在可绑定实例的上下文。
您可能正在考虑类似的事情:
class Foo(object):
y = 1
x = self.y * 2
这是不可能的,因为没有self
- 事实上,在评估类语句的主体时,还没有实例或类对象存在。也没有必要,因为可以直接引用主体范围内的其他变量,而无需使用self
.
请注意,对 self 成员的赋值和对类范围内变量的赋值有两种不同的作用:
class Foo(object):
y = 1 # class variable
def __init__(self):
self.x = self.y * 2 # instance variable, defined by reference to class variable
first = Foo()
Foo.y = 2
first.y = 3
second = Foo()
print first.x # = 2
print second.x # = 4
self是一个约定 - 不是 Python 的保留字。常规方法声明中的第一个参数表示对象。然而,为了代码的可读性和一致性,不在类之外使用self是一种传统的智慧。
通常,您可以使用任何单词作为变量标识符,但变量名称隐含地包含在代码文档中,因此最好使用尽可能多的不言自明的名称,您可以压缩到 5 -12 个符号(这些是我的偏好)——它们可能更长,但是太长的名称会使您的代码混乱。
类之外的self是没有意义的——它不会帮助代码阅读者理解代码。因此,如果您愿意,可以使用它——但这不是一个好主意。
这个链接(http://www.python.org/doc/essays/ppt/acm-ws/sld051.htm)可能会给你一些关于类与实例变量的澄清,我相信你在问。查看该页面和相应的下一张幻灯片。
如果这不能清楚你的要求,就类方法而言,我不确定我是否知道你指的是什么。我建议阅读“classmethod”(http://docs.python.org/2/library/functions.html#classmethod)和“staticmethod”(http://docs.python.org/2 /library/functions.html#staticmethod )