Kaydet (Commit) f5223740 authored tarafından Ethan Furman's avatar Ethan Furman Kaydeden (comit) Miss Islington (bot)

bpo-33437: add __new__ vs __init__ example (GH-9145)



Improve Enum docs.


https://bugs.python.org/issue33437
üst 865c17fb
...@@ -736,6 +736,37 @@ Some rules: ...@@ -736,6 +736,37 @@ Some rules:
type's :meth:`__format__`. If the :class:`Enum` class's :func:`str` or type's :meth:`__format__`. If the :class:`Enum` class's :func:`str` or
:func:`repr` is desired, use the `!s` or `!r` format codes. :func:`repr` is desired, use the `!s` or `!r` format codes.
When to use :meth:`__new__` vs. :meth:`__init__`
------------------------------------------------
:meth:`__new__` must be used whenever you want to customize the actual value of
the :class:`Enum` member. Any other modifications may go in either
:meth:`__new__` or :meth:`__init__`, with :meth:`__init__` being preferred.
For example, if you want to pass several items to the constructor, but only
want one of them to be the value::
>>> class Coordinate(bytes, Enum):
... """
... Coordinate with binary codes that can be indexed by the int code.
... """
... def __new__(cls, value, label, unit):
... obj = bytes.__new__(cls, [value])
... obj._value_ = value
... obj.label = label
... obj.unit = unit
... return obj
... PX = (0, 'P.X', 'km')
... PY = (1, 'P.Y', 'km')
... VX = (2, 'V.X', 'km/s')
... VY = (3, 'V.Y', 'km/s')
...
>>> print(Coordinate['PY'])
Coordinate.PY
>>> print(Coordinate(3))
Coordinate.VY
Interesting examples Interesting examples
-------------------- --------------------
......
...@@ -68,6 +68,7 @@ Ammar Askar ...@@ -68,6 +68,7 @@ Ammar Askar
Neil Aspinall Neil Aspinall
Chris AtLee Chris AtLee
Aymeric Augustin Aymeric Augustin
Andres Ayala
Cathy Avery Cathy Avery
John Aycock John Aycock
Donovan Baarda Donovan Baarda
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment