Chame uma classe IntEnum de dentro de um dicionário
Eu tenho um exemplo de classe IntEnum:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Isso precisa ser chamado pela __init__
função de outra classe:
class ExampleClass():
def __init__(look_at_shapes=None):
"""
Args:
look_at_shapes (dict): A dictionary of shape inputs.
"""
if look_at_shapes:
self.shape = ShapeMethod.NONE
if look_at_shapes["colour"]:
self.colour = look_at_shapes["colour"]
def do_something_with_shape:
if self.shape == ShapeMethod.circle:
print('awesome you got a circle'.)
elif self.shape == ShapeMethod.square:
print('squares have 4 sides.')
else:
print('nothing to see here.')
onde, o self.shape
atributo precisa ser circle
, square
ou NONE
.
A do_something_with_shape
função seria então chamada por:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
A estrutura de input
precisa ser um dicionário e é razoavelmente simples definir o colour
. No entanto, não sei como usar corretamente a IntEnum
classe de dentro de um dicionário. Por exemplo, se eu quiser imprimirsquares have 4 sides.
Observação: todas as opções ShapeMethod(IntEnum)
precisam ser capitalizadas?
O que eu olhei até agora:
A documentação do Python fornece vários exemplos; entretanto, nenhum se encaixa exatamente no meu caso.
Respostas
Uma maneira de usar seria a seguinte:
from enum import IntEnum
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
class ExampleClass:
def __init__(self, look_at_shapes=None):
"""
Args:
look_at_shapes (dict): A dictionary of shape inputs.
"""
self.shape = None
self.colour = None
if look_at_shapes:
if look_at_shapes[ShapeMethod]:
self.shape = look_at_shapes[ShapeMethod]
if look_at_shapes["colour"]:
self.colour = look_at_shapes["colour"]
def do_something_with_shape(self):
if self.shape is ShapeMethod.NONE:
print('awesome you got a circle.')
elif self.shape is ShapeMethod.square:
print('squares have 4 sides.')
else:
print('nothing to see here.')
input_var = {
"colour": 'blue',
ShapeMethod: ShapeMethod.square
}
my_object = ExampleClass(look_at_shapes=input_var)
my_object.do_something_with_shape()
Em relação à sua pergunta lateral:
Observação: todas as opções
ShapeMethod(IntEnum)
precisam ser capitalizadas?
Depende inteiramente de você. Eles podem ser todos maiúsculos, o que está de acordo com o PEP 8, pois serão constantes. No entanto, muitas pessoas decidem colocar em maiúscula apenas a primeira letra e é uma escolha válida de estilo. A opção menos comum é usar todas as letras minúsculas ou misturar diferentes capitalizações, mas nada o impede de fazer isso. Veja esta resposta para uma referência completa.
input = {
"shape": ShapeMethod.square,
"colour": "blue",
}
def __init__(look_at_shapes=None):
"""
Args:
look_at_shapes (dict): A dictionary of shape inputs.
"""
look_at_shapes = look_at_shapes or {}
self.shape = look_at_shapes.get("shape", ShapeMethod.NONE)
self.colour = look_at_shapes.get("colour") # None if "colour" doesn't exist
def do_something_with_shape:
if self.shape == ShapeMethod.circle:
print('awesome you got a circle'.)
elif self.shape == ShapeMethod.square:
print('squares have 4 sides.')
else:
print('nothing to see here.')
Você precisa verificar em vez self.shape.value
de self.shape
quando está procurando verificar a string subjacente na classe enum.
if self.shape.value == 'circle':
Ou
if self.shape == ShapeMethod.circle