Python面向对象中的“私有化”
Python面向对象中的“私有化”
Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机。
为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可。
由双下划线
__
开始的属性在运行时被“混淆”,所以直接访问是不允许的。实际上,在 Python 带有双下划线的属性或方法并非正真意义上的私有,它们仍然可以被访问。
在类的内部定义中,所有以双下划线开始的名字都被“翻译”成前面加上单下划线和类名的形式。
示例:
>>> class TestObj(object): ... __war = "world" ... ... def __init__(self): ... self.__har = "hello" ... ... def __foo(self): ... print(self.__har + self.__war) ... ... ... >>> t = TestObj()>>> dir(t) # 拿到t里面的所有方法 ['_TestObj__foo', '_TestObj__har', '_TestObj__war', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getat tribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__ ', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']>>> t.__war Traceback (most recent call last):File "<input>", line 1, in <module>t.__war AttributeError: 'TestObj' object has no attribute '__war'>>> t.__har Traceback (most recent call last):File "<input>", line 1, in <module>t.__har AttributeError: 'TestObj' object has no attribute '__har'>>> t.foo() Traceback (most recent call last):File "<input>", line 1, in <module>t.foo() AttributeError: 'TestObj' object has no attribute 'foo'>>> t._TestObj__war 'world'>>> t._TestObj__har 'hello'>>> t._TestObj__foo() helloworld
转载于:https://www.cnblogs.com/bigtreei/p/9029528.html
Python面向对象中的“私有化”相关推荐
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
- Python面向对象中super用法与MRO机制
1. 引言 最近在研究django rest_framework的源码,老是遇到super,搞得一团蒙,多番查看各路大神博客,总算明白了一点,今天做一点总结. 2. 为什么要用super 1)让代码维 ...
- python面向对象中的私有属性和私有化方法
xx: 公有变量 (公有) _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 __xx:双前置下划线,避免与子类中的属性命名冲突, ...
- Python 面向对象(中)
在python中面向对象的三大特征: 封装,继承,多态 1. 析构方法 程序结束后,之后调用析构方法,来释放空间 def __del__(self):print("析构方法") 2 ...
- Python面向对象中:__init__() 构造方法
什么是构造方法 在创建类时, 可手动添加一个 __init__()方法,称为构造方法,这是一个实例方法 构造方法用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用它 ...
- Python面向对象中的self到底是什么?
初次接触类的概念,在学习的网页上,对self的解释是self是方法的一个参数,在方法调用的时候,这个参数是默认传参数的 我们看一个例子 很多人学习python,不知道从何学起. 很多人学习python ...
- 请解释python面向对象中的继承
解释继承 一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法). 继承使我们可以重用代码,并且还可以更方便地创建和维护代码.Python ...
- python面向对象中方法重写class Person (object):#说明Person继承object类 def __init__(self,name,age): sel
(承接上次的知识学习) 首先给出方法重写的定义: 1.如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写: 2.子类重写后的方法可以通过super().xxx()调用父 ...
- python面向对象中的类
1. 类的构成 类(Class) 由3个部分构成: 类的名称:类名: 类的属性:一组数据: 类的方法:允许对进行操作的方法 (行为) 列如,--人类的设计: 人类的设计我们只关心三样东西: 事物名称 ...
最新文章
- Javabean学习纪要
- 你随便动幕布,投影跟不上算我输,动态投影黑科技,AE特效秒变成真
- java io读取doc内容_Java word 内容读取-Go语言中文社区
- 从零开始学 Java - Spring MVC 统一异常处理
- spring事务管理-概念部分
- 在SE37里批量执行ABAP函数
- 如何在Ubuntu上轻松安装Oracle Java
- 租金 预测_如何预测租金并优化租赁期限,从而节省资金
- node.js更新升级(Mac与Windows)- 总结篇
- 史上最全!计算机科学领域顶会最佳论文大合集:微软研究院最多,清华排24...
- 数据库每日一题 2020.04.30
- 6.FreeRTOS学习笔记-信号量
- 在哪里学python-为什么要选择学python,亮点在哪呢?
- 防火墙状态检测及会话表技术
- LINUX搭建EtherPad环境
- DateUtils封装
- 布衣联盟装机常用软件光盘——金鼠报春版
- win10计算机还原点如何创建,win10系统创建还原点及系统还原的操作方法
- C++(电子)PPT例6、例7作业提交
- C++中的CopyElision
热门文章
- 影像科dsa为什么必须买维修保险_DSA在医疗方面为什么重要?看这3点
- php 说说,PHP程序员:你过来,给我说说 $this,self,static 有什么区别?
- grpc python 负载均衡_Ambassador 0.52 新特性:会话亲和性、负载均衡控制、gRPC-Web
- Python爬虫之(七)数据提取-正则表达式
- 机器人水库涵洞检测_管渠清淤机器人、管道浑水探测机器人……想不到吧?哈排水集团竟然是“科研达人”...
- 笔记+R︱信用风险建模中神经网络激活函数与感知器简述
- [spark]Spark2.4.6用bulkload写入Hbase1.3.1表的多列
- ThreadLocalConnection
- cacti设置redis监控端口
- os10.10上versions崩溃的问题解决