我使用的是python3.8,我创建了两个服务(ForwarderService
, LogService
),但我很困惑为什么这两个服务类型是相同的,如何解决?
代码
from enum import Enum, auto
import abc
class ServiceType(Enum):
Forwarder = auto
Log = auto
class Service(metaclass=abc.ABCMeta):
@property
@abc.abstractmethod
def type(self) -> ServiceType:pass
class ForwarderService(Service):
@property
def type(self) -> ServiceType:
return ServiceType.Forwarder
class LogService(Service):
@property
def type(self) -> ServiceType:
return ServiceType.Log
s1 = ForwarderService()
s2 = LogService()
print(s1.type, s2.type)
结果
ServiceType.Forwarder ServiceType.Forwarder
我想要 s1.type
是 ServiceType.Forwarder
而 s2.type
是 ServiceType.Log
吗?
答案 0 :(得分:3)
你打错了:
class ServiceType(Enum):
Forwarder = auto
Log = auto
应该是:
class ServiceType(Enum):
Forwarder = auto()
Log = auto()
否则,它会将其解释为相同的值,在这种情况下,您最终只会得到一个枚举类型的枚举对象,而 Log
充当别名。 >
因此,请考虑:
>>> from enum import Enum
>>> class Foo(Enum):
... bar = 0
... baz = 0
...
>>> list(Foo)
[<Foo.bar: 0>]
>>> Foo.baz
<Foo.bar: 0>