[英]How to abstract a base class with a specified method?
假設所有子類都可以有自己的選擇,例如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
繼承的基礎 class
預期為:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.