如何使用 Enum.__members__ 无法访问的私有枚举值?
How to use private enum values that are not accessible by Enum.__members__?
像这样的 Enum 对象:
from enum import Enum
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
_citrus = {orange, lemon}
def is_citrus(self):
return self in self.citrus
当我们尝试检查其成员时:
>>> Fruits.__members__.keys()
dict_keys(['apple', 'banana', 'orange', 'lemon', '_citrus'])
我们得到了所有可能的枚举值。有没有一种方法可以声明私有与 public 枚举,其中某些特定值是私有的并且 Enum.__members__
无法访问?
可以这样做:
from enum import Enum
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
_citrus = {orange, lemon}
def is_citrus(self):
return self in self.citrus
@classmethod
def values(cls):
return set(k for k in cls.__members__.keys() if not k.startswith('_'))
用法:
>>> Fruits.values()
{'apple', 'banana', 'lemon', 'orange'}
是否有其他方法可以限制成员访问?
Python 的枚举中是否有私有成员与 public 成员的示例?
你可以使用 property
来解决这个问题,像这样:
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
@property
def _citrus(self):
return {self.__class__.orange, self.__class__.lemon}
def is_citrus(self):
return self in self._citrus
print(Fruits.orange.is_citrus())
# True
print(Fruits.__members__.keys())
dict_keys(['apple', 'banana', 'orange', 'lemon'])
像这样的 Enum 对象:
from enum import Enum
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
_citrus = {orange, lemon}
def is_citrus(self):
return self in self.citrus
当我们尝试检查其成员时:
>>> Fruits.__members__.keys()
dict_keys(['apple', 'banana', 'orange', 'lemon', '_citrus'])
我们得到了所有可能的枚举值。有没有一种方法可以声明私有与 public 枚举,其中某些特定值是私有的并且 Enum.__members__
无法访问?
可以这样做:
from enum import Enum
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
_citrus = {orange, lemon}
def is_citrus(self):
return self in self.citrus
@classmethod
def values(cls):
return set(k for k in cls.__members__.keys() if not k.startswith('_'))
用法:
>>> Fruits.values()
{'apple', 'banana', 'lemon', 'orange'}
是否有其他方法可以限制成员访问?
Python 的枚举中是否有私有成员与 public 成员的示例?
你可以使用 property
来解决这个问题,像这样:
class Fruits(str, Enum):
apple = "apple"
banana = "banana"
orange = "orange"
lemon = "lemon"
@property
def _citrus(self):
return {self.__class__.orange, self.__class__.lemon}
def is_citrus(self):
return self in self._citrus
print(Fruits.orange.is_citrus())
# True
print(Fruits.__members__.keys())
dict_keys(['apple', 'banana', 'orange', 'lemon'])