为什么继承不适合这个

时间:2015-11-24 09:00:21

标签: python enums

1,我首先使用Python 2.7版,并通过pip安装了enum模块。

from enum import Enum

class Format(Enum):
    json = 0
    other = 1
    @staticmethod
    def exist(ele):
        if Format.__members__.has_key(ele):
            return True
        return False

class Weather(Enum):
    good = 0
    bad = 1
    @staticmethod
    def exist(ele):
        if Weather.__members__.has_key(ele):
            return True
        return False

Format.exist('json')

哪种方法效果很好,但我想改进代码。

2,所以我认为更好的方式可能是这样的:

from enum import Enum

class BEnum(Enum):
    @staticmethod
    def exist(ele):
        if BEnum.__members__.has_key(ele)                   
            return True
        return False

class Format(Enum):
    json = 0
    other = 1

class Weather(Enum):
    good = 0
    bad = 1

Format.exist('json')

但是这会导致错误,因为BEnum.__members__是一个类变量。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:3)

这里有三件事你需要做。首先,您需要BEnum继承Enum

class BEnum(Enum):

接下来,您需要使BEnum.exist成为一种类方法:

    @classmethod
    def exist(cls,ele):
        return cls.__members__.has_key(ele)

最后,您需要从Format继承WeatherBEnum

class Format(BEnum):

class Weather(BEnum):

exist是一个静态方法,它只能在特定的类上运行,无论它是从哪个类调用。通过使它成为一个类方法,它被调用的类自动作为第一个参数(cls)传递,并可用于成员访问。

Here是关于静态方法和类方法之间差异的一个很好的描述。