Python 私有函数的实例详解


Posted in Python onSeptember 11, 2017

Python 私有函数的实例详解

与大多数语言一样,Python 也有私有的概念:

• 私有函数不可以从它们的模块外面被调用
• 私有类方法不能够从它们的类外面被调用
• 私有属性不能够从它们的类外面被访问

与大多数的语言不同,一个 Python 函数,方法,或属性是私有还是公有,完全取决于它的名字。

如果一个 Python 函数,类方法,或属性的名字以两个下划线开始 (但不是结束),它是私有的;其它所有的都是公有的。

Python 没有类方法保护 的概念 (只能用于它们自已的类和子类中)。类方法或者是私有 (只能在它们自已的类中使用) 或者是公有 (任何地方都可使用)。

在 MP3FileInfo 中,有两个方法:__parse 和 __setitem__。正如我们已经讨论过的,__setitem__ 是一个专有方法;通常,你不直接调用它,而是通过在一个类上使用字典语法来调用,但它是公有的,并且如果有一个真正好的理由,你可以直接调用它 (甚至从 fileinfo 模块的外面)。然而,__parse 是私有的,因为在它的名字前面有两个下划线。

Note: Method Naming C onventions

在 Python 中,所有的专用方法 (像 __setitem__) 和内置属性 (像 __doc__) 遵守一个标准的命名习惯:开始和结束都有两个下划线。不要对你自已的方法和属性用这种方法命名;到最后,它只会把你 (或其它人) 搞乱。

1. 尝试调用一个私有方法

>>> import fileinfo 
>>> m = fileinfo.MP3FileInfo() 
>>> m.__parse("/music/_singles/kairo.mp3") (1) 
Traceback (innermost last): 
 File "<interactive input>", line 1, in ? 
AttributeError: 'MP3FileInfo' instance has no attribute '__parse'

(1)  如果你试图调用一个私有方法,Python 将引发一个有些误导的异常,宣称那个方法不存在。当然它确实存在,但是它是私有的,所以在类外是不可使用的。严格地说,私有方法在它们的类外是可以访问的,只是不容易处理。在 Python 中没有什么是真正私有的;在内部,私有方法和属性的名字被忽然改变和恢复,以致于使得它们看上去用它们给定的名字是无法使用的。你可以通过 _MP3FileInfo__parse 名字来使用 MP3FileInfo 类的 __parse方法。知道了这个方法很有趣,然后要保证决不在真正的代码中使用它。

私有方法由于某种原因而私有,但是像其它很多在 Python 中的东西一样,它们的私有化基本上是习惯问题,而不是强迫的。

希望通过本文大家能够理解掌握Python 私有函数的使用,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
关于Python中异常(Exception)的汇总
Jan 18 Python
使用Python实现简单的服务器功能
Aug 25 Python
python实现字符串加密成纯数字
Mar 19 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
python3使用GUI统计代码量
Sep 18 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
python处理RSTP视频流过程解析
Jan 11 Python
在jupyter notebook中调用.ipynb文件方式
Apr 14 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
通过Python实现一个简单的html页面
May 16 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
Python模拟用户登录验证
Sep 11 #Python
Python模拟三级菜单效果
Sep 11 #Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 #Python
Python 模拟购物车的实例讲解
Sep 11 #Python
python添加模块搜索路径方法
Sep 11 #Python
解决Django模板无法使用perms变量问题的方法
Sep 10 #Python
python实现批量修改文件名代码
Sep 10 #Python
You might like
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
jquery获取radio值实例
2014/10/16 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
python求最大值最小值方法总结
2019/06/25 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
公司总经理工作职责管理办法
2014/02/28 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
好好学习保证书
2015/02/26 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python