为什么Python的“私有”方法实际上不是私有的?

Python使我们能够通过在名称前加上双下划线来创建类中的“私有”方法和变量,如下所示:__myPrivateMethod()..那么,如何解释这一点呢?>>> class MyClass:...     def myPublicMethod(self):...             print 'public method'...     def __myPrivateMethod(self):...

print 'this is private!!'... >>> obj = MyClass()>>> obj.myPublicMethod()public method

>>> obj.__myPrivateMethod()Traceback (most recent call last):

File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod'>>> dir(obj)['_MyClass__myPrivateMethod', '_

_doc__', '__module__', 'myPublicMethod']>>> obj._MyClass__myPrivateMethod()this is private!!

怎么回事?!

我给那些不太明白的人解释一下。>>> class MyClass:...     def myPublicMethod(self):...             print 'public method'...     def __myPrivateMethod(self):...

print 'this is private!!'... >>> obj = MyClass()

我所做的就是用一个公共方法和一个私有方法创建一个类并实例化它。

接下来,我称之为它的公共方法。>>> obj.myPublicMethod()public method

接下来,我尝试调用它的私有方法。>>> obj.__myPrivateMethod()Traceback (most recent call last):

File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod'

这里一切都很好,我们不能称之为。事实上,它是‘私人的’。其实不是。跑迪尔()在对象上,揭示了python为您的所有“私有”方法神奇地创建的一种新的神奇方法。>>> dir(obj)['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']

此新方法的名称始终是下划线,后面是类名,后面是方法名。>>> obj._MyClass__myPrivateMethod()this is private!!

封装就这么多了,嗯?

在任何情况下,我都听说Python不支持封装,那么为什么还要尝试呢?什么给予?

python init方法是不是私有方法_为什么Python的“私有”方法实际上不是私有的?...相关推荐

  1. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法

    似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...

  2. python中none算变量吗_在python中对变量判断是否为None的三种方法总结

    三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这 ...

  3. python tab键自动补全_设置python中TAB键自动补全方法

    设置python中TAB键自动补全方法 一.创建自动补全脚本如下: vi /tmp/python/tab.py #!/usr/bin/python # python tab file import s ...

  4. python迭代器两个基本方法可供参考_浅析python迭代器和生成器

    可迭代对象 概念 一个对象(在Python里面一切都是对象)只要实现了只要实现了__iter__()方法,那么这个对象就是可迭代对象 常见的可迭代对象 集合或序列类型(如list.tuple.set. ...

  5. 递归python首尾相同的子字符串_推荐Python语言多层嵌套list的递归处理方法

    本文主要向大家介绍了Python语言多层嵌套list的递归处理方法,希望对大家学习Python语言有所帮助. 问题:用Python处理一个多层嵌套list['and', 'B', ['not', 'A ...

  6. python中seek函数的用法_在Python中操作文件之seek()方法的使用教程

    seek()方法在偏移设定该文件的当前位置.参数是可选的,默认为0,这意味着绝对的文件定位,它的值如果是1,这意味着寻求相对于当前位置,2表示相对于文件的末尾. 没有返回值.需要注意的是,如果该文件被 ...

  7. truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程

    truncate()方法截断该文件的大小.如果可选的尺寸参数存在,该文件被截断(最多)的大小. 大小默认为当前位置.当前文件位置不改变.注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台 ...

  8. python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...

    [摘要]python的功能都是建立在代码之上的,不过你知道python字符串做变量名的方法有哪些?这些方法对python应用很重要,如果你想学好python,那么本文内容一定要自己试试,毕竟实践出真知 ...

  9. python同时打开两个文件_在python中使用with打开多个文件的方法

    虽然初恋是java, 可是最近是越来越喜欢python, 所以决定追根溯源好好了解下python的原理,架构等等.小脑袋瓜不太好使,只能记录下慢慢进步吧 使用with打开文件的好处不多说,这里记录一下 ...

  10. python 魔法方法常用的有_【Python】面向对象常用魔法方法集合

    最近发现同学们的问题保持了一致,都是在问我一些魔法方法的使用及意义,所以在这里也是专门给大家整理一份魔法方法的详解及使用集合. 众所周知,方法是需要调用执行的,而魔法方法则不一样,他无需你的调用,在特 ...

最新文章

  1. 用一行代码高效的求一个列表的平方和
  2. Linux的Nginx九:负载均衡
  3. shell编程系列26--大型脚本工具开发实战
  4. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
  5. 牛客题霸 [子数组的最大累加和问题] C++题解/答案
  6. 【转载】C# 理解泛型
  7. 京东成全国首批支持第三方商家接入数字人民币的企业
  8. 深入了解TMG企業版的獨立陣列
  9. JAVA里的jsp网页背景_Java-带CSS的JSP不显示背景图像
  10. python机器人编程教材_python人工智能机器人工具书籍: Learn Robotics Programming(python and Raspberry Pi 3) - 2018...
  11. 贾俊平统计学思维导图- 第十三章 时间序列分析和预测
  12. 【学习】从HttpClient3迁移到HttpClient4
  13. python是跨平台语言吗_python可以跨平台么
  14. android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) .
  15. 简单使用resquests爬取雪球网数据,分析股票走势
  16. Python生成二维码脚本
  17. Nignx 网关 和 GateWay网关
  18. 闽南师范大学计算机系实力,这5所地方师范大学实力挺强,在本地很受认可,性价比高...
  19. 视频重建论文EDVR: Video Restoration with Enhanced Deformable Convolutional Networks阅读笔记
  20. mysql中的BIT_LENGTH和LENGTH以及CHAR_LENGTH的区别

热门文章

  1. python将索引升序_程序在Python中按升序删除元素后获取列表的索引
  2. Debian部署postgresql并允许远程连接
  3. frp端口映射服务器搭建
  4. 攻击 FreeIPA 域:对象枚举
  5. 编写第一个Android程序
  6. Windows事件等待学习笔记(一)—— 临界区自旋锁
  7. 【grafana】API 遇到的问题
  8. 136. 邻值查找【set lower_bound】
  9. MySQL带关系运算符的查询
  10. 关于分布式锁原理的一些学习与思考:redis分布式锁,zookeeper分布式锁