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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
python通过文件头判断文件类型
Oct 30 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python编程中装饰器的使用示例解析
Jun 20 Python
Python 通配符删除文件的实例
Apr 24 Python
python实现C4.5决策树算法
Aug 29 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
python numpy 矩阵堆叠实例
Jan 17 Python
python如何把字符串类型list转换成list
Feb 18 Python
Python 批量下载阴阳师网站壁纸
May 19 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
COM in PHP (winows only)
2006/10/09 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
wxPython框架类和面板类的使用实例
2014/09/28 Python
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
python pygame实现球球大作战
2019/11/25 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis