如何使用指定的方法抽象基类?

说所有的子类都可以有自己的选择,比如 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


以上是如何使用指定的方法抽象基类?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>