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