Llamar a una clase IntEnum desde dentro de un diccionario
Tengo una clase IntEnum de ejemplo:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Eso debe ser llamado por la __init__
función de otra clase:
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.')
donde, el self.shape
atributo debe estar circle
, square
o NONE
.
La do_something_with_shape
función sería entonces ser llamado por:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
La estructura de input
debe ser un diccionario y es razonablemente simple establecer el colour
. Sin embargo, no sé cómo usar correctamente la IntEnum
clase desde dentro de un diccionario. Por ejemplo, si quiero imprimirsquares have 4 sides.
Nota: ¿Todas las opciones ShapeMethod(IntEnum)
deben estar en mayúsculas?
Lo que he mirado hasta ahora:
La documentación de Python ofrece varios ejemplos; sin embargo, ninguno encaja en mi caso exacto.
Respuestas
Una forma de uso sería la siguiente:
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()
Con respecto a su pregunta paralela:
Nota: ¿Todas las opciones
ShapeMethod(IntEnum)
deben estar en mayúsculas?
Depende totalmente de ti. Pueden estar todos en mayúsculas, lo que está de acuerdo con PEP 8 ya que serán constantes. Sin embargo, mucha gente decide poner en mayúscula solo la primera letra y es una elección de estilo válida. La opción menos común es usar todas las minúsculas o mezclar diferentes mayúsculas, sin embargo, no hay nada que le impida hacerlo. Consulte esta respuesta para obtener una referencia 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.')
self.shape.value
Debe verificar en lugar de self.shape
cuándo está buscando verificar la cadena subyacente en la clase enum.
if self.shape.value == 'circle':
O
if self.shape == ShapeMethod.circle