Python 方法中变量加self和不加的区别
2014-03-29 06:55
471 查看
这段代码我觉得很好的说明了python中类的方法在加self和不加self的区别。
个人认为方法中加self的变量可以看成是类的属性,或者是特性。使用方法改变和调用属性,属性改变实例的状态。方法中不加self的变量可以看成一个局部变量,该变量不能被直接引用。
类本身的局部变量(个人的认为定义在方法以外不以self开头的变量是类本身的局部变量)是可以被直接掉用的,注意这里不是指上面所说的方法内的局部变量(这两个命名空间不同)。如果方法中有有变量与类的局部变量同名,那么方法中的局部变量将会屏蔽类中的局部变量即类中的局部变量不在起作用。
本文纯属个人简介,如有错误的地方,感谢指出。
本文代码来自:https://gist.github.com/hahastudio/9304929#file-gistfile1-py
>>> 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
相关文章推荐
- Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别
- Python 方法中变量加self和不加的区别
- 【Python】类的属性和方法的参数加不加self的区别
- python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别
- self.方法和_对变量的引用的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- Python的实例方法,类方法,静态方法之间的区别及调用关系
- ios开发中类方法与实例方法区别 以及self有什么不同
- asp.net 前台绑定后台变量方法总结:<%= %> 和<%# %>的区别
- python和shell变量互相传递的几种方法
- 定义C/C++全局变量/常量几种方法的区别
- 【Python】判断一个变量的数据类型的两种方法
- python 类中 普通方法,类方法,静态方法的区别?
- 笨方法学习Python 习题19 函数和变量 ---学习记录
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- python的try方法中的else和finally的区别
- python中静态方法和类方法的区别
- python 递归时存储中间变量要用copy 方法,否则出栈就废了
- ObjectiveC中的self.变量和_变量的区别
- python环境变量和import模块导入方法