lifehacks.metaclasses
1.0.0
? lifehacks.metaclasses
├── meta
├── enum
└── EnumException
pip install lifehacks.metaclassesmeta metaclasseenum MetaclassEnumExceptionmeta metaclasse Existem algumas maneiras de fazer uma meta -classe.
from lifehacks . metaclasses import meta
class myenum0 ( metaclass = meta ): ...
@ meta # preferred method
class myenum1 : ...
@ meta () # do not use this method
class myenum2 : ...enum Metaclass O mesmo acontece com meta de cima, existem algumas maneiras de fazer uma aula enum .
from lifehacks . metaclasses import enum
# with typing
class MyPalette0 ( metaclass = enum [ Colour ]): ...
@ enum # preferred method
class MyPalette1 : ...
@ enum [ Colour ] # syntax only allowed python>=3.9
class MyPalette2 : ...
@ enum () # do not use this method
class MyPalette3 : ...Exemplo de uso:
from lifehacks . metaclasses import enum
@ enum [ Colour ]
class BasePalette :
BLACK = ...
WHITE = ...
# extending base palette enum
class SubPalette ( BasePalette ):
RED = ...
GREEN = ...
# can be used in type hinting
def print_colours ( palette : enum [ Colour ]) -> None :
for name , value in palette :
print ( name , value )
print_colours ( BasePalette ) # BLACK, WHITE
print_colours ( SubPalette ) # BLACK, WHITE, RED, GREEN
print ( BasePalette . BLACK in SubPalette ) # True As aulas enum não são instantáveis, mais sobre isso abaixo.
EnumException As aulas enum não são instantáveis. Se você tentar, você recebe uma EnumException
@ enum
class Palette : ...
p = Palette () # illegal, raises EnumException