为什么属性继承abc.ABCclass是一样的?

Why property is same while inherit abc.ABC class?

我正在使用 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.Forwarder 并且 s2.typeServiceType.Log ?

你打错了:

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>