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中os.path用法分析
Jan 15 Python
Python制作数据导入导出工具
Jul 31 Python
python简单实现刷新智联简历
Mar 30 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
python学习之hook钩子的原理和使用
Oct 25 Python
python爬虫-模拟微博登录功能
Sep 12 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
使用 Python 遍历目录树的方法
Feb 29 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
python开发飞机大战游戏
Jul 15 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
如何实现JS函数的重载
2006/09/22 Javascript
utf8的编码算法 转载
2006/12/27 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
JS 组件系列之 bootstrap treegrid 组件封装过程
2017/04/28 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
2019/04/23 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
Python兔子毒药问题实例分析
2015/03/05 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
党支部书记先进事迹
2014/01/17 职场文书
合伙经营协议书范本
2014/04/18 职场文书
店长岗位职责
2015/02/11 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript