当前位置: 首页 > 面试题库 >

Python-对象名称前的单下划线和双下划线是什么意思?

仇承志
2023-03-14
问题内容

可以解释一下在Python中使用对象名称前加下划线的含义吗?另外,说明单首和双首下划线之间的区别。无论所讨论的对象是变量,函数,方法等,该含义是否保持不变?


问题答案:

单下划线

类中带有下划线的名称仅是为了向其他程序员表明该属性或方法旨在私有。但是,名称本身并没有做任何特别的事情。

引用PEP-8:

_single_leading_underscore:“内部使用”指标较弱。例如from M import *,不导入名称以下划线开头的对象。

双下划线(名称改写)

从Python文档:

形式上的任何标识符__spam(至少两个前导下划线,至多一个尾随下划线)在文本上均被替换为_classname__spam,其中classname,当前类名已去除前导下划线。进行这种修饰时无需考虑标识符的语法位置,因此可用于定义类私有实例和类变量,方法,全局变量中存储的变量,甚至实例中存储的变量。在其他类的实例上对此类私有。

和来自同一页面的警告:

名称修饰旨在为类提供一种轻松的方法,以定义“私有”实例变量和方法,而不必担心派生类定义的实例变量或类外部代码对实例变量的处理。请注意,修改规则主要是为了避免发生意外。坚定的灵魂仍然有可能访问或修改被视为私有的变量。

>>> class MyClass():
...     def __init__(self):
...             self.__superprivate = "Hello"
...             self._semiprivate = ", world!"
...
>>> mc = MyClass()
>>> print mc.__superprivate
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: myClass instance has no attribute '__superprivate'
>>> print mc._semiprivate
, world!
>>> print mc.__dict__
{'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!


 类似资料:
  • 本文向大家介绍python中单下划线和双下划线分别是什么?相关面试题,主要包含被问及python中单下划线和双下划线分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 name:一种约定,python内部的名字,是用来与用户自动以的名字区分开,防止冲突

  • >>> class MyClass(): ... def __init__(self): ... self.__superprivate = "Hello" ... self._semiprivate = ", world!" ... >>> mc = MyClass() >>> print mc.__superprivate Traceback (most recen

  • rank ▲ ✰ vote url 64 365 174 322 url 在实例名字前单下划线和双下划线的含义 我想刨根问底,这到底是什么意思?解释一下他俩的区别. 单下划线 在一个类中的方法或属性用单下划线开头就是告诉别的程序这个属性或方法是私有的.然而对于这个名字来说并没有什么特别的. 引自PEP-8: 单下划线:"内部使用"的弱指示器.比如,from M import * 将不会引进用但下划

  • 我正在学习基本的PHP,试图阅读JOOMLA核心文件并对其有一些基本的了解,但我遇到了很多运算符,如“:”等,我不懂。 我在谷歌做了一些研究,有很多关于双冒号(::)的解释,但在“::”上几乎什么都没有,包含这个操作符的文件之一是joomla site root/mod_login/tmpl/default。php,行是 那么这意味着什么呢?是“JRoute::(('index.php',true

  • 在参考Flutter教程时,我遇到了一个下划线。 null

  • 问题内容: 我在阅读“ JPA 2.0中的动态类型安全查询”一 文,偶然发现了以下示例: 我想知道,这里的下划线到底是什么意思? 由于下划线是类名的有效部分,所以我不明白为什么可以在JPA中使用它。我用代码中的现有实体检查了这个,当然我的班级无法解析为 问题答案: 那就是持久性的元模型。这是您可以在Java中键入安全JPA查询的方法。它允许查询静态地检查您的查询,因为类描述了您的JPA 。在HQL