因小写枚举名称而导致名称冲突的示例?

问题描述 投票:0回答:1

Python Enum 教程建议对 Enum 成员使用大写名称“以帮助避免混合类方法/属性与枚举名称之间的名称冲突问题”。

这种名称冲突的例子是什么?

python enums
1个回答
0
投票
直接从另一个枚举成员访问另一个枚举成员的能力有时很有用,但可能会导致这种冲突。这是在简单枚举的情况下如何从另一个成员访问一个成员的方法:

import enum class MyEnum(enum.Enum): foo = 1 bar = 2 foo = MyEnum.foo foo.bar # access to MyEnum.bar <MyEnum.bar: 2>
现在想象一个自定义枚举,您在其中混合了一个名为 

bar()

 的方法的类,该方法与枚举成员之一的名称相同:

class MixinClass(): def bar(self): print ('bar method') class MyEnum(MixinClass, enum.Enum): foo = 1 bar = 2 foo = MyEnum.foo foo.bar # <MyEnum.bar: 2> # but foo.bar() # TypeError: 'MyEnum' object is not callable
即因为枚举成员的名称与方法的名称相匹配,所以无法以通常的方式访问继承的 

.bar()

 方法(如果有解决方法,我不知道)。

© www.soinside.com 2019 - 2024. All rights reserved.