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__是类变量。

我该如何工作?

最佳答案

您需要在这里做三件事。首先,您需要使BEnumEnum继承:

class BEnum(Enum):


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

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


最后,您需要让FormatWeatherBEnum继承:

class Format(BEnum):

class Weather(BEnum):


exist是静态方法的情况下,无论从哪个类调用它,它都只能对特定的类进行操作。通过使其成为类方法,从其调用的类将作为第一个参数(cls)自动传递,并可用于成员访问。

Here很好地描述了静态方法和类方法之间的区别。

关于python - 为什么继承对此不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33889285/

10-12 23:41