定义或调用类的attribute or method时,要加self。他们是类的“属性”,实例化后可以通过object.attribute, object.method()的方法使用。
定义或调用类的局部变量或方法的局部变量时,不加self,如果是类的局部变量,那么在类内都可以访问,但他不是类的属性,所以不能以实例化(object.attribute)的方式访问;如果是方法的局部变量,那么在方法内都可以访问。
>>> 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'
reference:https://www.cnblogs.com/xdd1997/p/13585295.html