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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
python读取oracle函数返回值
Jul 18 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python实现逆滤波与维纳滤波示例
Feb 26 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
Python Http请求json解析库用法解析
Nov 28 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 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
PHP新手上路(三)
2006/10/09 PHP
PHP 木马攻击防御技巧
2009/06/13 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
PHP开发注意事项总结
2015/02/04 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
php7下的filesize函数
2019/09/30 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
AngularJs 禁止模板缓存的方法
2017/11/28 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
微信小程序实现随机验证码功能
2018/12/20 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
工程造价专业大专生求职信
2013/10/06 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
晚会邀请函范文
2014/01/24 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
天堂的孩子观后感
2015/06/11 职场文书
消防演习感想
2015/08/10 职场文书
银行服务理念口号
2015/12/25 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP