可能重复:
Python ‘self’ explained
我是编程和python的新手。我理解在类方法中使用self
并声明类变量,但是,我的问题是:为什么isn' t self
用于在类方法之外声明变量?"我不确定这个术语,所以如果这个问题已在另一篇文章中得到回答,我会道歉。
答案 0 :(得分:2)
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
答案 1 :(得分:0)
self 是一种约定 - 而不是保留的Python词。常规方法声明中的第一个参数表示对象。然而,为了代码的可读性和一致性,不使用 self 外部类是一种传统的智慧。
通常,您可以使用任何单词作为变量标识符,但变量名称隐含地是代码文档的一部分,因此使用尽可能不言自明的名称是一个好习惯。 5-12个符号(这些是我的偏好) - 它们可能更长,但是太长的名字会使你的代码变得混乱。
课外的self 毫无意义 - 它无法帮助读者理解代码。所以如果你愿意,你可以使用它 - 但这不是一个好主意。
答案 2 :(得分:0)
这个链接(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)