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使用PyGame模块播放声音的方法
May 20 Python
Python编程中装饰器的使用示例解析
Jun 20 Python
python中的字典使用分享
Jul 31 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
django 修改server端口号的方法
May 14 Python
Python中偏函数用法示例
Jun 07 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
Python3 log10()函数简单用法
Feb 19 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
使用python turtle画高达
Jan 19 Python
Matplotlib animation模块实现动态图
Feb 25 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
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
高一家长会邀请函
2014/01/12 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
学习型班组申报材料
2014/05/31 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
企业授权委托书范本
2014/09/22 职场文书
区域销售大会开幕词
2016/03/04 职场文书
Go 语言结构实例分析
2021/07/04 Golang
SQL语句多表联合查询的方法示例
2022/04/18 MySQL