从形式上看,在定义类的成员时,如果成员名以两个下划线(__)开头则表示是私有成员,但是Python并没有对是有成员提供严格访问保护机制。私有成员在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类外部通过调用对象的公有成员方法来访问。另外,Python提供了一种特殊方式“对象名._类名__xxx”可以访问私有成员,但这会破坏类的封装性,不推荐这样做(不过真的很难阻止别人这么做)。公有属性是可以公开使用的,既可以在类的内部进行访问,也可以在外部程序中使用。

 1 class A():
 2     def __init__(self,value1=0,value2=0):   # 类的构造函数
 3         self._value1 = value1               # _value1是非私有成员
 4         self.__value2 = value2              # __value2 是私有成员
 5
 6     def setvalue(self,value1,value2):       #定义一个成员方法,用来修改私有成员的值
 7         self._value1 = value1
 8         self.__value2 = value2              #在类的内部可以直接访问私有成员
 9
10     def show(self):                         #定义一个成员方法,用来向外界展示私有成员的
11         print(self._value1)
12         print(self.__value2)
13
14 if __name__ == '__main__':
15     a = A()
16
17     print(a._value1)                        #在类外部可以直接访问非私有成员
18     #print(a.__value2)                      #在类外部不能访问私有成员
19     print(a._A__value2)                     #可以用这种方式在类外部访问对象的私有数据成员

  在Python中,以下划线开头和结束的成员名有特殊的含义,类定义中使用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员。

    (1)_xxx :保护成员,不能用‘from module import *’导入,只有类对象和子类对象可以访问这些成员。

    (2)__xxx__:系统定义的特殊成员,详见4.1.7节。

    (3)__xxx:类中的私有成员,一般只有类对象自己能访问,子类对象也不能访问到这个成员,但是在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。

  注意:Python中不存在严格意义上的私有成员。

转载于:https://www.cnblogs.com/avention/p/8631335.html

4.1.2 私有成员与公有成员相关推荐

  1. 微课|中学生可以这样学Python(7.3.1节):私有成员与公有成员

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第7章  面向对象程序设计 7.3.1  私有成员与公有成员 京东购买链接:https://ite ...

  2. python私有成员与公有成员_Python访问限制私有还是公有的介绍(附示例)

    本篇文章给大家带来的内容是关于Python访问限制私有还是公有的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.知识点 在一个模块中,我们可能会定义很多函数和变量. ...

  3. 4)公有成员\私有成员和静态成员

    1)实现类的公有成员.     前面定义的任何类成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法.         2)实现类的私有成员.     私有成员,即只在类的内部实现中可以共 ...

  4. Javascript中公有成员,私有成员,静态成员

    一.实现类的公有成员: 1) 定义的成员属性和方法能够被任何实例访问,对任何的实例都是公开的,成为公有成员.在javascript中,一般的属性和方法的定义都是公有的,请看下面的例子: functio ...

  5. python中表示类的公有成员_在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员。...

    在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员. 更多相关问题 [填空题] 汽车板金的一般修理工艺是:校正.敲平.().().焊接及点焊. [填空题] 汽车照明系统主要由() ...

  6. Python 面向对象设计基础实战【私有成员、保护成员、公有成员、数据成员、实例化、方法】

    Reference:<Python程序设计基础(第2版)> Reference:<Python中的装饰器>https://www.jianshu.com/p/417ac7d95 ...

  7. 深入理解JavaScript模拟私有成员

    一般的面向对象语言C++或JAVA,对象都是有私有成员的.js中没有类的改变,同样也没有对象的私有成员这个概念.但是可以通过某些特殊写法,模拟出私有成员. 1.特权模式: (1)在构造函数内部声明的变 ...

  8. C++ 基类私有成员会被继承吗

    文章目录 1.派生类间接访问基类私有成员 2.私有成员会被继承吗 参考文献 1.派生类间接访问基类私有成员 在类的继承中,基类私有成员在派生类中是"不可见"的,这种"不可 ...

  9. 面向对象——私有成员

    私有成员:私有成员变量,私有成员函数: 私有成员函数的调用时机 私有成员函数的调用时机仅发生在当前类内部,最终由当前类的其他公有成员函数所调用,因为私有成员对其他类不可见. 所以,一个不被当前类所调用 ...

最新文章

  1. 1 创建数据库连接对象 IDbConnection
  2. JPA:确定关系的归属方
  3. Javamysql语法转化oracle_MySQL与Oracle的语法区别详细对比
  4. Go 并发编程 — 深入浅出 sync.Pool ,最全的使用姿势,最深刻的原理
  5. pycharm cpu占用低_AMD的CPU游玩2077提升帧数的办法
  6. linux 常用命令练习
  7. (USB HID) Report Descriptor 理解
  8. SPOJ7259(Light Switching)
  9. 7832:最接近的分数
  10. java开发中常用linux指令,Java开发需掌握的常用Linux命令
  11. windows tcp ping 端口工具及使用方法
  12. Spring-data ElasticSearch的使用
  13. 爬虫日记之05两种Web请求渲染过程(附图解和网站实例)
  14. .mdf数据库恢复mysql_只有mdf文件和ldf文件,怎么恢复数据库。
  15. YNUOJ-开学大作战之补番真开心(2018/8/29)
  16. CentOS Mac 安装zsh,使用oh-my-zsh
  17. 更换任意Linux内核 Ubuntu18.04 内核降级升级
  18. 旧佳人的伤感非主流空间心情日志发布:想念,是一种忧伤的幸福
  19. 移动支付之支付宝支付
  20. ASPX页面AJAX调用ASPX后台

热门文章

  1. RDS For MySQL常见连接问题总结
  2. 3GU仙果游戏达成三地技术引擎战略合作联盟
  3. 腾讯X5联手白鹭Egret Runtime 合作共推HTML5游戏发展
  4. 一天学完spark的Scala基础语法教程十三、文件IO操作(idea版本)
  5. jQuery综合案例——打地鼠(教学版本·附源码)
  6. ubuntu安装postman
  7. PHP面试题:mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
  8. ORA-01123:无法启动联机备份;未启用介质恢复(错误分析)
  9. IPC介绍——10个ipcs例子
  10. npm的镜像替换成淘宝