tl; рдбреЙ
github.com/QratorLabs/fastenumpip install fast-enum
рдПрдирдо рдХреНрдпрд╛ рд╣реИрдВ?
(рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ - "рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ Enums" рдЦрдВрдб рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ)ред
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рд╕рдВрднрд╡рддрдГ рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
... рдпрд╛ рд╡рд░реНрдЧ-рд╕реНрддрд░реАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреА рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд:
class MyModelStates: INITIAL = 0 PROCESSING = 1 PROCESSED = 2 DECLINED = 3 RETURNED = 4
рдпрд╣ рдЖрдкрдХреЛ рдЙрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЙрдирдХреЗ mnemonic рдирд╛рдореЛрдВ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рд░рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛, рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдЬрд╛рджреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЖрддреНрдо-рд╡рд░реНрдгрдирд╛рддреНрдордХ рдмрдирд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди, рдореЙрдбреНрдпреВрд▓-рд╕реНрддрд░реАрдп рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рджреЛрдиреЛрдВ рдЕрдЬрдЧрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИрдВ: рд╡реЗ рд╕рднреА рдкрд░рд╕реНрдкрд░ рднрд┐рдиреНрди рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рддреА рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдкрдиреЗ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЛ рд╡реИрд▓реНрдпреВ рдЕрд╕рд╛рдЗрди рдХрд░ рджреЗрдВ, рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рдЯреВрдЯреЗ рд╣реБрдП рдбреАрдмрдЧ рдХреЛ рдбрд┐рдмрдЧ рдФрд░ рд░реЛрд▓рдмреИрдХ рдХрд░рдиреЗ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрдкрдиреЗ рд╕реЗрдЯ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдШреЛрд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд
namedtuple()
рд╕рд╛рде
namedtuple()
рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
MyModelStates = namedtuple('MyModelStates', ('INITIAL', 'PROCESSING', 'PROCESSED', 'DECLINED', 'RETURNED')) EntityStates = MyModelStates(0, 1, 2, 3, 4)
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
namedtuple
рдЪреАрдЬреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдирд╣реАрдВ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ UI рд╣реИ рдЬреЛ рдЗрди рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓-рдЖрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдпрд╛ рдирд╛рдорд╛рдВрдХрд┐рдд рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЕрдВрддрд┐рдо рджреЛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрдмрдХрд┐ рд╣рдо рдЙрд╕ рдкрд░ рд╣реИрдВ)ред рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдпреВрдЖрдИ рдореЗрдВ рдмрд╣реБ-рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рдФрд░ i18n рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рднрд░рдирд╛ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдХрдард┐рди рдХрд╛рд░реНрдп рдмрди рдЬрд╛рддрд╛ рд╣реИред рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдп рдорд╛рдиреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдорд┐рд▓рд╛рди рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рднреА
INITIAL
рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ
gettext
рдореЗрдВ рдПрдХ рд╣реА рд╡рд┐рд╡рд░рдг рдкрд░ рдореИрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИ:
INITIAL = (0, 'My_MODEL_INITIAL_STATE')
рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рддрдм рдпрд╣ рдмрди рдЬрд╛рддреА рд╣реИ:
class MyModelStates: INITIAL = (0, 'MY_MODEL_INITIAL_STATE')
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХрд╛ рдирд╛рдо-рдкрддреНрд░
namedtuple
рдмрди рдЬрд╛рддрд╛ рд╣реИ:
EntityStates = MyModelStates((0, 'MY_MODEL_INITIAL_STATE'), ...)
рдЦреИрд░, рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдпреВрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдореВрд▓реНрдп рдФрд░ рдЕрдиреБрд╡рд╛рдж рд╕реНрдЯрдм рджреЛрдиреЛрдВ рдореИрдк рдХрд┐рдП рдЧрдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдЬреЛ рдЙрди рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬрдм рднреА рдЖрдк рдЕрдкрдиреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореИрдкрд┐рдВрдЧ рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ 0 рдкрд░ рдореВрд▓реНрдп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рднреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ:
my_entity.state = INITIAL[0]
рдпрд╛
my_entity.state = MyModelStates.INITIAL[0]
рдпрд╛
my_entity.state = EntityStates.INITIAL[0]
рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдХреНрд░рдорд╢рдГ рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЕрднреА рднреА рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИрдВред
рдФрд░ рдлрд┐рд░ рдПрдирдо рдордВрдЪ рдкрд░ рдЖрддреЗ рд╣реИрдВ
class MyEntityStates(Enum): def __init__(self, val, description): self.val = val self.description = description INITIAL = (0, 'MY_MODEL_INITIAL_STATE') PROCESSING = (1, 'MY_MODEL_BEING_PROCESSED_STATE') PROCESSED = (2, 'MY_MODEL_PROCESSED_STATE') DECLINED = (3, 'MY_MODEL_DECLINED_STATE') RETURNED = (4, 'MY_MODEL_RETURNED_STATE')
рдпрд╣ рдмрд╛рдд рд╣реИред рдЕрдм рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рд░реЗрдВрдбрд░рд░ (Jinja2 рд╕рд┐рдВрдЯреИрдХреНрд╕) рдореЗрдВ рдПрдирдо рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{% for state in MyEntityState %} <option value=тАЭ{{ state.val }}тАЭ>{{ _(state.description) }}</option> {% endfor %}
Enum рджреЛрдиреЛрдВ рд╕рджрд╕реНрдп рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ (рдЖрдк рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рдирдП рд╕рджрд╕реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рди рд╣реА рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рджрд╕реНрдп рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рд╡реЗ рд╕рджрд╕реНрдп рдорд╛рди рдЬреЛ рд╡реЗ рд░рдЦрддреЗ рд╣реИрдВ (рдЖрдк рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЖрдк рдЕрдкрдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд╛рди рджреЗрддреЗ рд╣реИрдВ:
my_entity.state = MyEntityStates.INITIAL.val
рдЦреИрд░, рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╕реНрд╡ рд╡рд░реНрдгрдирд╛рддреНрдордХред рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ред рдпрд╣реА рд╣рдо Enums рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рддреЗрдЬ рдХреНрдпреЛрдВ рд╣реИ?
рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ ENUM рдзреАрдорд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЦреБрдж рд╕реЗ рдкреВрдЫрд╛ - рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдФрд░ рддреЗрдЬрд╝ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
- рд╕рджрд╕реНрдп рдкрд╣реБрдВрдЪ рдкрд░ 3 рдЧреБрдирд╛ рддреЗрдЬ
- ~ 8.5 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ (
name
, value
) рдкрд╣реБрдВрдЪ рдкрд░ - рдореВрд▓реНрдп рд╕реЗ
MyEnum(value)
рдкрд╣реБрдВрдЪ рдкрд░ 3 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ ( MyEnum(value)
рдХреА рдХрдХреНрд╖рд╛ MyEnum(value)
рдкрд░ рдХреЙрд▓) - рдирд╛рдо рд╕реЗ рдбреЗрдврд╝ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдкреНрд░рд╡реЗрд╢ (
MyEnum[name]
рддрд░рд╣ MyEnum[name]
)
рдкрд╛рдпрдерди рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд╕реНрддреБрдПрдВ рдЧрддрд┐рд╢реАрд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрдкрдХрд░рдг рд╣реИрдВред рдЙрдирдХреА рдорджрдж рд╕реЗ
__slots__
рдХрд╛ рдЙрдкрдпреЛрдЧ
__slots__
рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛
__slots__
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ рдЬрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдпрд╛ рдпрджрд┐ рдЖрдк рдЧрддрд┐ рдореЗрдВ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрд▓реЙрдЯреНрд╕
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ
__slots__
рд╕рд╛рде рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдХреНрд╖рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╕рдореВрд╣ рд╣реЛрдЧрд╛:
__slots__
рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА
__slots__
ред
рд╡рд░реНрдгрдирдХрд░реНрддрд╛
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реАрдзреЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЧреБрдг рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
value = my_obj.attribute
рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЧреБрдг рдорд╛рди рд╕реНрд╡рдпрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рд╡ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЙрд╕ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐
__get__
рд╣реИред рдХреАрдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛-рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
obj_attribute = my_obj.attribute obj_attribute_value = obj_attribute.__get__(my_obj)
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ Enums
рдорд╛рдирдХ Enum рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрдо рд╕реЗ рдХрдо
name
рдФрд░
value
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ
types.DynamicClassAttribute
рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛
types.DynamicClassAttribute
ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рджрд╕реНрдп рдХрд╛
name
(рдпрд╛
value
) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдореНрди рд╣реИ:
one_value = StdEnum.ONE.value
рддреЛ, рдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрджреНрдо рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
def get_func(enum_member, attrname):
рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ:
from enum import Enum class StdEnum(Enum): def __init__(self, value, description): self.v = value self.description = description A = 1, 'One' B = 2, 'Two' def get_name(): return StdEnum.A.name from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput graphviz = GraphvizOutput(output_file='stdenum.png') with PyCallGraph(output=graphviz): v = get_name()
рдФрд░ рд╣рдордиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЪрд┐рддреНрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛:

рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк stdlib enum рдХреЗ рдЧреБрдг
name
рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ рдФрд░
value
рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╣рд▓рд╛рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ рдпрд╣ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдЬреЗ рд╕реНрдЯреИрдорд▓рд┐рдм рдПрдиреБрдо рдХреА рдбрд┐рдл
def name(self)
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдЦреИрд░, рдЖрдк рд╣рдорд╛рд░реЗ FastEnum рд╕реЗ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
from fast_enum import FastEnum class MyNewEnum(metaclass=FastEnum): A = 1 B = 2 def get_name(): return MyNewEnum.A.name from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput graphviz = GraphvizOutput(output_file='fastenum.png') with PyCallGraph(output=graphviz): v = get_name()
рдЬреЛ рдЗрд╕ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИ:

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирдХ Enum рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдкрдиреЗ Enum рд╕рджрд╕реНрдпреЛрдВ рдХреЗ
name
рдФрд░
value
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реАрд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреЗрдЬ рд╣реИред
рдкрд╛рдпрдо рд╕реНрдЯреИрдВрдбрд░реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдирдо рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд░реНрдгрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЙрд▓ рдХреЗ рдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдорд╛рдирдХ рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рддреЛ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐
Enum
рд╕рджрд╕реНрдпреЛрдВ рдХреЗ
name
рдФрд░
value
рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдереЗред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реЗ рдХреЛрдб рдореЗрдВ рдЧрдгрдирд╛ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдХ рдПрдирдо рд╡рд░реНрдЧ рдореЗрдВ рд╕рд╣рд╛рдпрдХ "рд╕рдВрд░рдХреНрд╖рд┐рдд" рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ:
_member_names_
- рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕рдореЗрдВ _member_names_
рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рднреА рдирд╛рдо рд╣реИрдВ;_member_map_
- рдПрдХ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ enum рд╕рджрд╕реНрдп рдХрд╛ рдирд╛рдо рдореИрдк рдХрд░рддрд╛ рд╣реИ;_value2member_map_
- рдПрдХ рд░рд┐рд╡рд░реНрд╕ рд╢рдмреНрджрдХреЛрд╖ рдЬреЛ _value2member_map_
рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП enum рд╕рджрд╕реНрдп рдорд╛рдиреЛрдВ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред
рдбрд┐рдХреНрд╢рдирд░реА рд▓реБрдХрдЕрдк рдзреАрдорд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдПрдХ рд╣реИрд╢ рдХреИрд▓рдХреБрд▓реЗрд╢рди рдФрд░ рд╣реИрд╢ рдЯреЗрдмрд▓ рд▓реБрдХрдЕрдк рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрди рдбрд┐рдХреНрд╢рдирд░реА рдХреЛ рдПрдирдо рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЗрд╖реНрдЯрддрдо рдЖрдзрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рджрд╕реНрдп рд╕реНрд╡рдпрдВ рднреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐
StdEnum.MEMBER
) рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдЦреЛрдЬ рд╣реИред
рд╣рдорд╛рд░рд╛ рд░рд╛рд╕реНрддрд╛
рдЕрдкрдиреЗ Enum рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ рдЙрди рд╕реБрдВрджрд░ рд╕реА-рднрд╛рд╖рд╛ enumerations рдФрд░ рд╕реБрдВрджрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ Java Enums рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ:
- рдПрдХ Enum рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; "рд╕реНрдЯреИрдЯрд┐рдХ" рд╕реЗ рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ: рдпрджрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рдЧрдгрдирд╛ рдПрдХ рдмрд╛рд░ рдФрд░ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдордп рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдпрджрд┐ рдХреЛрдИ рдЙрдкрд╡рд░реНрдЧ рдирдИ рдПрдиреБрдо рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдирдо рдХреЛ рдЙрдкрд╡рд░реНрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ("рдЕрдВрддрд┐рдо" рд╡рд░реНрдЧ) - рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ, рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ рдЙрдк-рд╡рд░реНрдЧ рдирд┐рд╖рд┐рджреНрдз рд╣реИ рднрд▓реЗ рд╣реА рдХреЛрдИ рдирдпрд╛ рд╕рджрд╕реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рд╣реЛ;
- рдПрдХ рдПрдирдо рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЗрддрдиреЗ рдкрд░) рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд╛рд▓ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЬрдм рд╣рдо рдбрд┐рдХреНрд╢рдирд░реА рд▓реБрдХрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рдХреЗрд╡рд▓ Enum рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕ рдореИрдкрд┐рдВрдЧ
value
рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдЧрдгрдирд╛ рдХрдХреНрд╖рд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рджреМрд░рд╛рди рд╕рд┐рд░реНрдл рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдХрд▓рд╛рд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдкреНрд░рдердо рдорд╛рди рдХреЛ рд╕рджрд╕реНрдп рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ
=
рдЪрд┐рдиреНрд╣ рдХреЗ рдмрд╛рдж рдорд╛рдирддреЗ рд╣реИрдВ:
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ
A = 1, 'One'
рдкреВрд░реЗ рдЯрд╛рдкрд▓
1, "One"
рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
1, "One"
рдХреЛ
value
рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
A: 'MyEnum' = 1, 'One'
рдХреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреЗрд╡рд▓
1
рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ
__slots__
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдХреА рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ
__slots__
рд╕рд╛рде рдШреЛрд╖рд┐рдд
__dict__
рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ
__dict__
рд╣реИ рдЬреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЧреБрдг рд░рдЦрддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЖрдк
__slots__
рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд,
__slots__
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реА-рд╕реНрддрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рд╣рд╛рдИ-рд╕реНрдкреАрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХреНрд╕реЗрд╕ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣реИрд╢ рдЧрдгрдирд╛ рдФрд░ рд╣реИрд╢рдЯреЗрдмрд▓ рд╕реНрдХреИрди рд╕реЗ рдмрдЪрддрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рднрддреНрддреЗ рдХреНрдпрд╛ рд╣реИрдВ?
рдлрд╛рд╕реНрдЯрдирдо 3.6 рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдпрдерди рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
typing
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдпрдерди 3.6 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдПрдХ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ PyPI рд╕реЗ рдПрдХ рдмреИрдХрдкреЛрд░реНрдЯ
typing
рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдЬрд╡рд╛рдм рд╣реИ: рдирд╣реАрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди PEP-484 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди 3.5 рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рдХрд╛рд░рдг рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░,
__new__
рдХреЗ
__new__
рдореЗрдВ рдХреЛрдб рдХреА рдмрд╣реБрдд рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдЪрд░ рдкреНрд░рдХрд╛рд░ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП PEP-526 рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рддреЛ рдкрд╛рдпрдерди 3.5 рдпрд╛ рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдХреНрдпреВрд░реЗрдЯрд░ рд▓реИрдмреНрд╕ рдореЗрдВ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣реЗ! рдЖрдк 3.6 рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдЬрдЧрд░ рд╕реЗ рдЪрд┐рдкрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рдкреАрдЫреЗ рдХреА рдЕрд╕рдВрдЧрддрддрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдкрд╛рдпрдерди 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рд╣рд╛рд▓рд╛рдВрдХрд┐ 3.5 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ asyncio рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдмрджрд▓реЗ рдореЗрдВ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╡рд┐рдкрд░реАрдд
auto
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ Enum рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рднреА Enum рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЯрд╛рдЗрдк-рд╣рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ - рдФрд░ рдореВрд▓реНрдп рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЬрдЧрд░ 3.6 FastEnum рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдХрд┐ рдШреЛрд╖рдгрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рдорд╛рдирдХ рд╢рдмреНрджрдХреЛрд╢ рдЖрджреЗрд╢ рдХреЗрд╡рд▓ рдЕрдЬрдЧрд░ 3.7 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдо рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рд╡реИрд▓реНрдпреВ рдСрд░реНрдбрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрдкрдиреНрди рдореВрд▓реНрдп рд╣реА рдРрд╕рд╛ рдорд╛рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реИ)ред рдлрд┐рд░ рднреА, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдЕрдЬрдЧрд░ 3.6 рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ;
рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ 1 рдХреЗ рдмрдЬрд╛рдп 0 (рд╢реВрдиреНрдп) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖
_ZERO_VALUED
рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛
_ZERO_VALUED
рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдиреБрдо рд╡рд░реНрдЧ рд╕реЗ "рдорд┐рдЯрд╛" рд╣реИ;
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ: рд╕рднреА рдПрдиреБрдо рд╕рджрд╕реНрдп рдХреЗ рдирд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдореЗрдЯрд╛рдХреНрд▓рд╕ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдирдо рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛;
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЕрдкрдиреЗ рдПрдирдореЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдПрдирдо рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рднреА рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ): рдЖрдк рдЗрд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ (рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрдЧ, рд▓реЗрдХрд┐рди рдПрдирдо рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рд╡рд░реНрдЧ "рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ" рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдЖрдк рддрдм рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЖрдкрдХреЛ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛;
рдЕрдиреНрдп рдирд╛рдоред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рдореЗрдВ рд╕рдордЭрд╛рдПрдВрдЧреЗ (1.2.5 рдореЗрдВ рд▓рд╛рдЧреВ)
рдЙрдкрдирд╛рдо рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ:
package_a.some_lib_enum.MyEnum
рдФрд░ рдпрд╣ рдХрд┐ MyEnum рдХреЛ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
class MyEnum(metaclass=FastEnum): ONE: 'MyEnum' TWO: 'MyEnum'
рдЕрдм, рдЖрдкрдиреЗ рдХреБрдЫ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдПрдирдо рдХреЛ рджреВрд╕рд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдПрдВ:
package_b.some_lib_enum.MyMovedEnum
рдЬрд╣рд╛рдВ MyMovedEnum рдХреЛ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
class MyMovedEnum(MyEnum): pass
рдЕрдмред рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛрдб рдХреЗ рд▓рд┐рдП "рдкрджрд╛рд╡рдирддрд┐" рдЪрд░рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЖрдк
MyEnum
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
MyMovedEnum
рдкреНрд░рддреНрдпрдХреНрд╖ usages рдХреЛ
MyEnum
рдХрд░рддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ
MyEnum
рдореЗрдВ
MyEnum
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреЙрдХреНрд╕ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐
MyEnum
рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдб рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВред рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЕрдЪрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдирдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ
MyMovedEnum
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╕рднреА enum рд╕рджрд╕реНрдп рдЕрднреА рднреА
MyEnum
рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдЖрдкрдХрд╛ рдЕрдЧрд▓рд╛ рдХрджрдо
MyEnum
рдФрд░
MyMovedEnum
рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐
MyMovedEnum
рдЕрдм
MyMovedEnum
рдХрд╛ рдЙрдкрд╡рд░реНрдЧ рди
MyEnum
рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХреЗ; рджреВрд╕рд░реА рдУрд░,
MyEnum
рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди
MyMovedEnum
рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдирд╛рдо (рдЙрдкрд╡рд░реНрдЧ) рдмрди
MyMovedEnum
ред
рдФрд░ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдЕрдирдкрд┐рдХрд▓ рд╕реНрдЯреЗрдЬ рдкрд░ рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЗ рд╕рднреА рдПрдирдо рд╡реИрд▓реНрдпреВ рдХреЛ
MyMovedEnum
рдореЗрдВ рд░реА-рд░реВрдЯ рдХрд░ рджрд┐рдпрд╛
MyMovedEnum
рдФрд░ рдЙрд╕ рдирдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдмрд╛рдЙрдВрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЬрд┐рд╕ рдХреНрд╖рдг рдЖрдкрдХреЛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕рднреА рдЪреБрдиреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдпреБрдХреНрдд рд░рд╛рд╖реНрдЯреНрд░ (рдлрд┐рд░ рд╕реЗ) рдЗрд╕ рд╡рд░реНрдЧ рд╕рдВрдЧрдарди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде
MyEnum
рд╣реИрдВ, рдЖрдк рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдкрдХрд╛
MyEnum
рдЕрдкреНрд░рдЪрд▓рд┐рдд рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдбрдмреЗрд╕ рд╕реЗ рд╣рдЯрд╛
MyEnum
рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ!
github.com/QratorLabs/fastenum ,
pypi.org/project/fast-enum ред рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯреНрд╕ FastEnum рд▓реЗрдЦрдХ
santjagocorkez рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ ред