python局部变量vs self

下面代码中self.x+self.yx+y什么区别?

class m2:
    x, y = 4, 5
    def add(self, x, y):
        return self.x + self.y
    def add2(self, x, y):
        return x + y

>>> x = m2()
>>> print "x.add(self.x + self.y = )", x.add(1, 2)
x.add(self.x + self.y = ) 9
>>> print "x.add2(x + y = )", x.add2(1, 2)
x.add2(x + y = ) 3

为什么self.x + self.y返回9x + y返回3


add您呼叫的类变量,而忽略方法参数xy

class m2:

    # these variables are class variables and are accessed via self.x and self.y
    x, y = 4, 5  

    def add(self, x, y):
        return self.x + self.y  # refers to 4 and 5

    def add2(self, x, y):
        return x + y  # refers to input arguments x and y, in your case 1 and 2

当在类作用域中定义xy ,它将使它们成为类变量。 它们是类m2一部分,你甚至不需要创建m2的实例来访问它们。

print m2.x, m2.y
>> 4, 5

但是,您也可以通过实例访问它们,就好像它们是像下面这样的实例变量:

m = m2()
print m.x, m.y
>> 4, 5

其原因在于解释器将查找名称为self.xself.y实例变量,如果未找到它,它将默认为类变量。

阅读更多关于python文档中的类属性。


不同的是,当你使用self时,你指的是你的类的实例的成员

直接使用X和Y时,请参考您在函数中使用的参数

这是你班级的简化

class m2:
    x_member1, y_member2 = 4, 5
    def add(self, x_parameter1, y_parameter2 ):
            return self.x_member1+ self.y_member2
    def add2(self, x_parameter1, y_parameter2 ):
            return x_parameter1 + y_parameter2

当一个类方法被调用时,第一个参数(按照惯例命名为self )被设置为类实例。 当方法访问self属性时,它访问类实例中的那些属性,并且它们的值在该实例中保持不变。

另一方面,如果一个类方法访问裸变量,那些变量对这些方法来说是严格的局部变量,并且它们的值不会在对该实例的类方法的调用中持续存在。

链接地址: http://www.djcxy.com/p/54289.html

上一篇: python local variables vs self

下一篇: crawler class methods work?