python局部变量vs self
  下面代码中self.x+self.y和x+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返回9而x + y返回3 ? 
  在add您呼叫的类变量,而忽略方法参数x和y 。 
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
  当在类作用域中定义x和y ,它将使它们成为类变量。  它们是类m2一部分,你甚至不需要创建m2的实例来访问它们。 
print m2.x, m2.y
>> 4, 5
但是,您也可以通过实例访问它们,就好像它们是像下面这样的实例变量:
m = m2()
print m.x, m.y
>> 4, 5
  其原因在于解释器将查找名称为self.x和self.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