这段代码我觉得很好的说明了python中类的方法在加self和不加self的区别。
>>> 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.one Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ‘AAA‘ object has no attribute ‘one‘ >>> a2.go() >>> a2.one ‘hello‘ >>> b1 = BBB() >>> b1.go() >>> b1.one Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ‘BBB‘ object has no attribute ‘one‘ >>> BBB.one Traceback (most recent call last): File "<stdin>", line 1, in <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.one Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ‘BBB‘ object has no attribute ‘one‘
个人认为方法中加self的变量可以看成是类的属性,或者是特性。使用方法改变和调用属性,属性改变实例的状态。方法中不加self的变量可以看成一个局部变量,该变量不能被直接引用。
类本身的局部变量(个人的认为定义在方法以外不以self开头的变量是类本身的局部变量)是可以被直接掉用的,注意这里不是指上面所说的方法内的局部变量(这两个命名空间不同)。如果方法中有有变量与类的局部变量同名,那么方法中的局部变量将会屏蔽类中的局部变量即类中的局部变量不在起作用。
本文纯属个人简介,如有错误的地方,感谢指出。
本文代码来自:https://gist.github.com/hahastudio/9304929#file-gistfile1-py