为什么继承 abc.ABC 类时属性相同?

时间:2021-06-25 03:46:39

标签: python python-3.x enums

我使用的是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.typeServiceType.Forwarders2.typeServiceType.Log 吗?

1 个答案:

答案 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>
相关问题