为什么在类方法之外没有自己用于类变量?

时间:2012-11-20 19:55:04

标签: python class variables

  

可能重复:
  Python ‘self’ explained

我是编程和python的新手。我理解在类方法中使用self并声明类变量,但是,我的问题是:为什么isn' t self用于在类方法之外声明变量?"我不确定这个术语,所以如果这个问题已在另一篇文章中得到回答,我会道歉。

3 个答案:

答案 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