python - 如何用指定的方法抽象基类?
问题描述
说所有子类都可以有自己的选择,比如class.choice()
from enum import IntEnum
class CompanyType(IntEnum):
BySelf = 1
Agency = 2
@staticmethod
def choice():
return [
(i.value, i.name) for i in CompanyType
]
class CompanyStatus(IntEnum):
StartUp = 1
LargeCompany = 2
@staticmethod
def choice():
return [
(i.value, i.name) for i in CompanyStatus
]
...
如何抽象一个可以用方法继承的基类choice
预期为:
from enum import IntEnum
class ChoiceBase_():
@staticmethod
def choice():
return [
(i.value, i.name) for i in specified_subclass
]
class CompanyType(ChoiceBase_, IntEnum):
BySelf = 1
Agency = 2
class CompanyStatus(ChoiceBase_, IntEnum):
StartUp = 1
LargeCompany = 2
print(CompanyType.choice())
print(CompanyStatus.choice())
解决方案
使用classmethod
装饰器来获取类常量:
class ChoiceBase_():
@classmethod
def choice(cls):
return [(i.value, i.name) for i in cls]
class CompanyType(ChoiceBase_, IntEnum):
BySelf = 1
Agency = 2
class CompanyStatus(ChoiceBase_, IntEnum):
StartUp = 1
LargeCompany = 2
print(CompanyType.choice())
print(CompanyStatus.choice())
出去:
[(1, 'BySelf'), (2, 'Agency')]
[(1, 'StartUp'), (2, 'LargeCompany')]
编辑:
在 Python36 中,继承自int
确保use int.__new__()
按照错误消息中的说明使用:
from enum import Enum
class CompanyStatus(int, ChoiceBase_, Enum):
StartUp = 1
LargeCompany = 2