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__
是类变量。我该如何工作?
最佳答案
您需要在这里做三件事。首先,您需要使BEnum
从Enum
继承:
class BEnum(Enum):
接下来,您需要使
BEnum.exist
为类方法: @classmethod
def exist(cls,ele):
return cls.__members__.has_key(ele)
最后,您需要让
Format
和Weather
从BEnum
继承:class Format(BEnum):
class Weather(BEnum):
在
exist
是静态方法的情况下,无论从哪个类调用它,它都只能对特定的类进行操作。通过使其成为类方法,从其调用的类将作为第一个参数(cls
)自动传递,并可用于成员访问。Here很好地描述了静态方法和类方法之间的区别。
关于python - 为什么继承对此不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33889285/