2012-11-20 31 views
2

可能重复:
Python ‘self’ explained为什么自变量不用于类方法之外的类变量?

我对编程和Python的新手。我理解在类方法中使用self并声明类变量,但是,我的问题是:为什么不用self来声明类方法之外的变量?“我不确定术语,所以我很抱歉如果这个问题已经被回答了另一篇文章。

+4

你能举一个你的意思吗? “类变量”和“类方法”可能并不意味着你认为他们在Python中做了什么。 – BrenBarn

+0

你有JavaScript的背景吗? (只是一个预感)在这种情况下,你必须考虑不同的对象... –

+0

'self'通常是调用类方法的第一个参数的名称,它引用该类的_instance_而不是类本身。类也是对象,但是它们的类被称为元类 - 您可能不需要关注它。要引用类属性,您可以使用该类的名称,即“My_c​​lass.attrib”。 – martineau

回答

2

self不用于任何地方声明变量。self为方法的第一个参数的常用名称,作为该方法接收到它结合作为第一个参数到每个呼叫实例。

它不用于“别处”,因为它仅适用于有可绑定的可召集实例的上下文中。

你可能在想的是这样的:

class Foo(object): 
    y = 1 
    x = self.y * 2 

这是不可能的,因为没有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

我想我混淆了两个概念。在__init__方法中,我使用self.Foo = 3,但是当不在方法中时,我只会使用foo = 3.这就是我迷惑的问题 –

+0

@AaronBooher而这个答案中解释的原因是:您必须使用' self'在方法中引用实例,但在方法外部没有实例可以引用。 – Marcin

0

自我一个约定 - 不是Python的保留字。常规方法声明中的第一个参数表示该对象。尽管如此,为了代码的可读性和一致性,在外部类中不使用self是常规的看法。

通常,您可以使用任何单词作为变量标识符,但变量名称隐含地是代码文档的一部分,所以最好使用尽可能简单明了的名称挤入5-12符号(这些是我的偏好) - 它们可能会更长,但名称太长会使代码混乱。

self课外是毫无意义的 - 它不会帮助代码读者理解代码。所以你可以使用它,如果你喜欢 - 但这不会是一个好主意。

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

+0

所以换句话说,每个实例的类变量是相同的,并且实例变量根据创建实例的时间而变化 –

相关问题