python的私有变量 是类变量吗?
来源:互联网 发布:mac怎么玩魔兽争霸 编辑:程序博客网 时间:2024/06/06 19:30
答案:我认为是是的
#!/usr/bin/pythonclass MyClass: count=0 name="default name" __sex = 1 def viewsex(self): print self.__sex def changeclasssex(self): MyClass.__sex = 9 def changeobjsex(self): self.__sex +=2 def viewclasssex(self): print MyClass.__sexr = MyClass();print "view r default __sex"r.viewsex()print "change r class private __sex"r.changeclasssex()r2 = MyClass();print "view r2 default __sex"r2.viewsex()print "view r2 now __sex"r2.viewclasssex()
通过上面的代码,我们通过MyClass.__sex是可以改变__sex的 值的
输出结果:
view r default __sex1change r class private __sexview r2 default __sex9view r2 now __sex9
初始设置为1.
r 对象的方法 changeclasssex 可以改变 __sex的值。
后面的 new的r2对象的值 默认就变成9了,因此。私有变量还是类变量
不同的是对象无法直接访问这个类变量,但是可以通过
r._MyClass__sex 这个变量访问,
因此,我认为,self .__sex 其实就是访问的这个变量的值。
__sex 类私有变量,不允许对象直接访问,间接的通过_MyClass__sex 来访问。
同样:
print MyClass.__sex;
直接访问类变量会报错:
Traceback (most recent call last): File "./test.py", line 43, in <module> print MyClass.__sex;AttributeError: class MyClass has no attribute '__sex'
总体来说:私有变量和其他的类变量没有什么不同。
只不过,私有变量不允许通过类和对象来直接访问,只能在 对象 或 类 的 函数内部调用和修改值。
如果是对象,可以通过r._MyClass__sex调用,这个值实际就是函数体内的self.__sex
再看一个有意思的
#!/usr/bin/pythonclass MyClass: count=0 name="default name" __sex = 1 def viewsex(self): print self.__sex def changeclasssex(self): MyClass.__sex = 9 def changeobjsex(self): self.__sex +=2 def viewclasssex(self): print MyClass.__sexr = MyClass();print "view r default __sex"r.viewsex()print "set value"r._MyClass__sex = 55r.viewsex()
结果:
view r default __sex1set value55
从上面看出 self.__sex 实际就是 _MyClass__sex变量的值,
当我们改变 r._MyClass__sex = 55 操作后
然后查看self.__sex的值已经改变成55. 这说明 self.__sex 实际上就是 self._MyClass__sex 的值
继续说明:
#!/usr/bin/pythonclass MyClass: count=0 name="default name" __sex = 1 def viewsex(self): print self.__sex def changeclasssex(self): MyClass.__sex = 9 def changeobjsex(self): self.__sex +=2 def viewclasssex(self): print MyClass.__sex def changeMyClassSex(self): self._MyClass__sex = 66r = MyClass();print "view r default __sex"r.viewsex()print "set value"r._MyClass__sex = 55r.viewsex()r.changeMyClassSex()r.viewsex()
结果:
view r default __sex1set value5566
当我们在函数内改变
self._MyClass__sex = 66
操作后
然后查询:
print self.__sex
发现 self.__sex 的值也发生了改变,可以看出来 self.__sex 其实是对 self._MyClass__sex 的一个引用。
也就是说:对于类私有变量,无法通过类的方法去访问私有变量,只能通过方法访问
对于类实例化的对象, 对象也是无法访问 __sex,只能在函数体内访问,不过self.__sex只是一个引用, 是对self._MyClass__sex 的引用
self._MyClass__sex 这个变量是public的
- python的私有变量 是类变量吗?
- Python 类的私有变量
- Python的私有变量
- Python 私有变量、私有方法、类变量与实例变量
- python类的重写、私有变量
- Python类的重写和私有变量
- python的私有变量解析
- python基础:类、私有变量、类变量
- 类的私有变量
- 类的私有变量
- Python类中的私有变量
- python 类中的私有变量
- Python变量-下划线,私有变量
- Python类中的私有成员(私有函数,私有变量)
- Python类中的私有成员(私有函数,私有变量)
- python之私有变量
- python下划线,私有变量
- python中的私有变量
- ffmpeg的编译、安装及使用 .
- 北大1114 神奇的口袋
- 递归求三角数字
- MyEclipse8.6 破解以及注册码
- MyBatis传入多个参数
- python的私有变量 是类变量吗?
- eclipse之 Type Hierachy:Viewing the type hierarchy
- 多图详解Spring框架的设计理念与设计模式
- JDK 的安装
- DistRaidNode的实现
- caffe中mnist数据集的运行
- 在Eclipses中查看JDK源码的方法
- 线程创建函数pthread_create
- Linux Makefile try-run