Python Enum 教程建议对 Enum 成员使用大写名称“以帮助避免混合类方法/属性与枚举名称之间的名称冲突问题”。
这种名称冲突的例子是什么?
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()
方法(如果有解决方法,我不知道)。