在Python中,有单个下划线、双下划线、双前后下划线和单个尾部下划线的命名约定。许多这些约定在What is the meaning of a single- and a double-underscore before an object name?中的答案中概述。
但是,单个前后下划线的含义或约定是什么?我最初看到它们的使用是在
但是,单个前后下划线的含义或约定是什么?我最初看到它们的使用是在
enum
模块中:
_name_
- 成员的名称_value_
- 成员的值;可以在 new 中设置/修改_missing_
- 当没有找到值时使用的查找函数;可能会被覆盖_ignore_
- 一个名称列表,可以作为 list() 或 str(),它们不会转换为成员,并将从最终类中删除_order_
- 在Python 2/3中用于确保成员顺序一致 (类属性,在创建类时删除)_generate_next_value_
- 由 Functional API 和 auto 使用,以获取枚举成员的适当值;可能会被覆盖
在IT技术中,我之前没见过这种单下划线sunder的命名方式。它们是否有特殊处理或含义,不同于其他下划线相关的命名规范?与没有下划线完全不同的是什么?
_name_
和_value_
是Enum
类型的属性,而不是元类EnumMeta
的属性。例如class Test(Enum): a = 0
,那么Test.a._name_ == 'a'
,但是Test._name_
则会引发AttributeError
。我可以理解在EnumMeta
上需要避免属性名称冲突,但是在生成的Enum
类型上存在什么冲突风险呢? - gerritTest.a.name
和Test.a.value
同样 有效,因此似乎_name_
和_value_
分别是name
和value
的同义词。 - gerritEnum
的作者,我批准这个答案。;-) - Ethan Furman_repr_jpeg_
和_repr_html_
,以为符合条件的Python对象提供定制渲染(详见https://ipython.readthedocs.io/en/stable/config/integrating.html)。 - fish2000