Python类的方法或特性变为“私有”方式
来源:互联网 发布:mysql thread conn 编辑:程序博客网 时间:2024/06/04 18:23
Python并不直接支持私有方式,而是靠程序员自己把握在外部进行特性修改的时机。毕竟在使用对象前应该知道如何使用。但是,可以使用一些小技巧达到私有特性的效果。
"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据
为了让方法或者特性变为私有(即使从外部无法访问),只要在他的名字前面加上双下划线即可:
__metaclass__ = type #确定使新式类class Person: __name = "xiaoli" def __ingreet(self): print("Hello,World!I'm %s."%self.__name) def outgreet(self): self.__ingreet()现在特性__name与方法__ingreet()从外界是无法进行访问的,而在类内部是可以访问的:
>>>foo = Person()>>>foo.__ingreet() AttributeError: 'Person' object has no attribute '__ingreet'>>>foo.__name AttributeError: 'Person' object has no attribute '__name'>>>foo.outgreet() Hello,World!I'm xiaoli.
尽管双下划线有些奇怪,但是看起来像是其他语言中的标准私有方法。真正发生的事情才是不标准的。类的内部定义中,所有双下划线开始的的名字都被“翻译”成前面加上单下划线和类名的形式。
>>>Person._Person__ingreet() Person._Person__ingreet()在了解了这些幕后的事情后,实际上还是能在类外访问这些私有方法,尽管不应该这样做:
>>>foo = Person()>>>foo._Person__ingreet() Hello,World!I'm xiaoli.
简而言之,确保其他人不会访问对象的方法和特性是不存在的,但是类的“名称变化术”就是他们不应该访问这些函数或者特性的强有力的信号。
如果不需要使用这种方法但是又想让其他对象不要访问内部数据,那么可以使用单下划线。这不过是一个习惯,但的确有实际效果。例如,前面带有下划线的名在都不会被带星号的import语句(form module import *)导入(有些语言支持多种层次的成员变量私有性。比如Java就支持4种级别。尽管单双下划线在某种程度上给出了两个级别的私有性,但是Python并没有真正的私有化支持)。
0 0
- Python类的方法或特性变为“私有”方式
- 让python类的方法或特性变成私有
- python 直接访问类的私有属性或方法
- java 将构造方法变为私有的,为什么其他类不能创建该类的对象?
- Python类私有方法的陷阱
- python 类的私有属性和方法
- 私有方法的查找方式
- Python类的特性方法
- Python类的特性方法
- Python访问类的私有属性和私有方法的正确姿势
- Python高级特性:私有属性
- Python 私有变量、私有方法、类变量与实例变量
- Python类中的 私有变量和私有方法
- junit 测试私有方法或私有变量
- Python类的私有成员
- Python 类的私有变量
- Python(私有变量)类中的特殊方法
- Python(私有变量)类中的特殊方法
- git版本管理工具用法介绍
- 如何在html中嵌入多媒体对象(pdf,word,flash等,)很有用的,记下
- 1479数据结构实验之栈:行编辑器
- 3540: [Usaco2014 Open]Fair Photography
- This Is Why They Call It a Weakly-Ordered CPU
- Python类的方法或特性变为“私有”方式
- (1)kNN算法_手写识别实例——基于Python和NumPy函数库
- jvm内存管理
- Android笔记:Socket客户端收发数据
- MUI - 新一代全面支持手机的UI框架
- 封装系统时删除pagefile.sys及hiberfil.sys文件
- 运维自动化之ansible saltstack使用对比分析
- 进程1的创建与轮转
- MyEclipse激活