fil*_*nts 3 python enums multiple-inheritance python-3.x
为什么重写_generate_next_value_
只有在 LAST 继承的枚举中完成才有效?
例如:
class AutoEnum(Enum):
def _generate_next_value_(name, start, count, last_values):
return 'overriding _generate_next_value'
class OtherEnum(Enum):
def some_other_method(self):
return
class AutoOther(AutoEnum, OtherEnum):
TEST = auto()
class OtherAuto(OtherEnum, AutoEnum):
TEST = auto()
print(f'{AutoOther.TEST}: mro={getmro(AutoOther)}\n'
f'name: {AutoOther.TEST.name}, value: {AutoOther.TEST.value}')
print(f'{OtherAuto.TEST}: mro={getmro(OtherAuto)}\n'
f'name: {OtherAuto.TEST.name}, value: {OtherAuto.TEST.value}')
Run Code Online (Sandbox Code Playgroud)
输出:
AutoOther.TEST: mro=(<enum 'AutoOther'>, <enum 'AutoEnum'>, <enum 'OtherEnum'>, <enum 'Enum'>, <class 'object'>)
name: TEST, value: 1
OtherAuto.TEST: mro=(<enum 'OtherAuto'>, <enum 'OtherEnum'>, <enum 'AutoEnum'>, <enum 'Enum'>, <class 'object'>)
name: TEST, value: overriding _generate_next_value
Run Code Online (Sandbox Code Playgroud)
_generate_next_value_
如果每次都以某种方式设置默认值(如果没有专门覆盖它),那么在继承 Enum 时如何不会再次重置它?
我想我遗漏了一些关于如何/为什么这样工作的内容。
特殊方法,例如_generate_next_value_
需要在实际创建类之前就位。为了支持这一点,EnumMeta
在基类中查找这些特殊方法Enum
——基Enum
类是最后列出的。
不过,当然感觉任何其他Enum
类也应该搜索枚举方法。
声明:我是Python stdlibEnum
、enum34
backport和Advanced Enumeration ( aenum
)库的作者 。
归档时间: |
|
查看次数: |
2023 次 |
最近记录: |