首页 > 编程 > Python > 正文

Python 方法中变量加self和不加的区别

2019-11-09 19:49:33
字体:
来源:转载
供稿:网友

这段代码我觉得很好的说明了python中类的方法在加self和不加self的区别。

123456789101112131415161718192021222324252627282930313233343536373839404142434445>>> class AAA(object):...     def go(self):...         self.one = 'hello'...>>> class BBB(object):...     def go(self):...         one = 'hello'...>>> a1 = AAA()>>> a1.go()>>> a1.one'hello'>>> a2 = AAA()>>> a2.oneTraceback (most recent call last):  File "<stdin>", line 1in <module>AttributeError: 'AAA' object has no attribute 'one'>>> a2.go()>>> a2.one'hello'>>> b1 = BBB()>>> b1.go()>>> b1.oneTraceback (most recent call last):  File "<stdin>", line 1in <module>AttributeError: 'BBB' object has no attribute 'one'>>> BBB.oneTraceback (most recent call last):  File "<stdin>", line 1in <module>AttributeError: type object 'BBB' has no attribute 'one'>>> class BBB(object):...     def go(self):...         one = 'hello'...         PRint one...         self.another = one...>>> b2 = BBB()>>> b2.go()hello>>> b2.another'hello'>>> b2.oneTraceback (most recent call last):  File "<stdin>", line 1in <module>AttributeError: 'BBB' object has no attribute 'one'

个人认为方法中加self的变量可以看成是类的属性,或者是特性。使用方法改变和调用属性,属性改变实例的状态。方法中不加self的变量可以看成一个局部变量,该变量不能被直接引用。

类本身的局部变量(个人的认为定义在方法以外不以self开头的变量是类本身的局部变量)是可以被直接掉用的,注意这里不是指上面所说的方法内的局部变量(这两个命名空间不同)。如果方法中有有变量与类的局部变量同名,那么方法中的局部变量将会屏蔽类中的局部变量即类中的局部变量不在起作用。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表