ger*_*rit 14 python enums naming-conventions underscores
在Python中,存在单个前导下划线,双前导下划线,双前导+双尾下划线和单尾随下划线的约定.其中许多内容在对象名称之前的单个和双下划线的含义中是什么?.
但单一领先+单尾跟下划线的意义或惯例是什么?我第一次看到他们在enum模块中的使用:
8.13.15.3.2.支持的
_sunder_名称
_name_- 会员姓名_value_- 会员价值; 可以在新的设置/修改_missing_- 未找到值时使用的查找函数; 可能会被覆盖_ignore_- 作为list()或str()的名称列表,不会转换为成员,并将从最终类中删除_order_- 在Python 2/3代码中使用以确保成员顺序一致(类属性,在类创建期间删除)_generate_next_value_- 由Functional API和auto用于获取枚举成员的适当值; 可能会被覆盖
我还没有见过这样的单龙头单结尾下划线破甲之前的名字.它们是以任何特殊方式处理,还是具有与任何其他与下划线相关的命名约定不同的隐含含义?它们与没有下划线有何不同?
它们没有以任何特殊方式处理.enum模块正在使用它们
例如
class Status(Enum):
alive = auto()
dead = auto()
missing = auto()
Run Code Online (Sandbox Code Playgroud)
你可以看到它Status.missing并且Status._missing_是不同的对象.如果_missing_允许名称,我们可能会意外地覆盖missing会导致意外错误的函数.
不是私人的._valuepython中的名称被认为是私有的.为了表示这些不是私有的(同样,用户可能希望枚举值是私有的),而是给出了sunder名称
如其他替代品__double_leading_underscore,并__dunder__也有蟒蛇特殊的含义,你如上所述.行为中的_sunder_方法Enum类似于__dunder__纯python 的协议,但不是由语言保留的.
基本上,它可以选择避免属性名称冲突,而不会给出错误的印象.