簡體   English   中英

如何用指定的方法抽象一個基礎 class?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM