擅长:python、mysql、java
<p>对于Python 3:</p>
<pre class="lang-py prettyprint-override"><code>class Status(Enum):
READY = "ready", "I'm ready to do whatever is needed"
ERROR = "error", "Something went wrong here"
def __new__(cls, *args, **kwds):
obj = object.__new__(cls)
obj._value_ = args[0]
return obj
# ignore the first param since it's already set by __new__
def __init__(self, _: str, description: str = None):
self._description_ = description
def __str__(self):
return self.value
# this makes sure that the description is read-only
@property
def description(self):
return self._description_
</code></pre>
<p>并且可以按类型将其用作标准枚举或工厂:</p>
<pre class="lang-py prettyprint-override"><code>print(Status.READY)
# ready
print(Status.READY.description)
# I'm ready to do whatever is needed
print(Status("ready")) # this does not create a new object
# ready
</code></pre>