源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python中的下划线详解

  • 时间:2020-04-03 04:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python中的下划线详解
这篇文章讨论Python中下划线_的使用。跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定。 [b]一、 单个下划线直接做变量名(_)[/b] 主要有三种情况: [b]1. 解释器中[/b] _符号是指交互解释器中最后一次执行语句的返回结果。这种用法最初出现在CPython解释器中,其他解释器后来也都跟进了。
[url=https://docs.djangoproject.com/en/dev/topics/i18n/translation/]Django documentation for translation [/url]中你可能会看到:
[url=https://docs.python.org/3.4/tutorial/classes.html#tut-private]Python documentation[/url]里面写道: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice. 之所以说在在 有些 import * 的场景,是因为导入时解释器确实对单下划线开头的名称做了处理。如果你这么写from <module/package> import *,任何以单下划线开头的名称都不会被导入,除非模块/包的__all__列表明确包含了这些名称。更多相关信息见““Importing * in Python”。 [b]三、双下划线前缀的名称(例如__shahriar)[/b] 以双下划线做前缀的名称(特别是方法名)并不是一种惯例;它对解释器有特定含义。Python会改写这些名称,以免与子类中定义的名称产生冲突。[url=https://docs.python.org/3.4/tutorial/classes.html#tut-private]Python documentation[/url]中提到,任何__spam这种形式(至少以两个下划线做开头,绝大部分都还有一个下划线做结尾)的标识符,都会文本上被替换为_classname__spam,其中classname是当前类名,并带上一个下划线做前缀。 看下面这个例子:
[u]复制代码[/u] 代码如下:
>>> class A(object): ...     def _internal_use(self): ...         pass ...     def __method_name(self): ...         pass ... >>> dir(A()) ['_A__method_name', ..., '_internal_use']
正如所料,_internal_use没有变化,但__method_name被改写成了_ClassName__method_name。现在创建一个A的子类B(这可不是个好名字),就不会轻易的覆盖掉A中的__method_name了:
[u]复制代码[/u] 代码如下:
>>> class C(object): ...     def __mine__(self): ...         pass ... >>> dir(C) ... [..., '__mine__', ...]
还是不要这样写方法名,只让Python定义的特殊方法名使用这种惯例吧。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部