2

可能重复:
Python 'self' 解释

我是编程和python的新手。我理解self在类方法中使用和声明类变量,但是,我的问题是:为什么不self用于在类方法之外声明变量? .

4

3 回答 3

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
于 2012-11-20T20:03:49.243 回答
0

self是一个约定 - 不是 Python 的保留字。常规方法声明中的第一个参数表示对象。然而,为了代码的可读性和一致性,不在类之外使用self是一种传统的智慧。

通常,您可以使用任何单词作为变量标识符,但变量名称隐含地包含在代码文档中,因此最好使用尽可能多的不言自明的名称,您可以压缩到 5 -12 个符号(这些是我的偏好)——它们可能更长,但是太长的名称会使您的代码混乱。

类之外的self是没有意义的——它不会帮助代码阅读者理解代码。因此,如果您愿意,可以使用它——但这不是一个好主意。

于 2012-11-20T20:05:42.837 回答
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 )

于 2012-11-20T20:06:14.147 回答