为什么只有在上一个继承的枚举中重写_generate_next_value_
才起作用
例如:
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}')
输出:
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
如果每次都设置默认的_generate_next_value_
,但没有特别覆盖它,那么在继承枚举时,它怎么不会再次重置
我想我在如何/为什么这样工作方面遗漏了一些东西
诸如
_generate_next_value_
之类的特殊方法需要在实际创建类之前就位。为了支持这一点,EnumMeta
在基类Enum
中查找这些特殊方法,基类Enum
是最后列出的一个当然,感觉上任何其他
Enum
类也应该搜索enum方法Issue created
披露:我是Python stdlib ^{} 、^{} backport 、和Advanced Enumeration (^{}) 图书馆的作者
相关问题 更多 >
编程相关推荐