Appeler une classe IntEnum à partir d'un dictionnaire
J'ai un exemple de classe IntEnum:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Cela doit être appelé par la __init__
fonction d'une autre 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.')
où, l' self.shape
attribut doit être circle
, square
ou NONE
.
La do_something_with_shape
fonction serait alors appelée par:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
La structure de input
doit être un dictionnaire et il est raisonnablement simple de définir le colour
. Cependant, je ne sais pas comment utiliser correctement la IntEnum
classe depuis l'intérieur d'un dictionnaire. Par exemple, si je veux imprimersquares have 4 sides.
Remarque: toutes les options ShapeMethod(IntEnum)
doivent-elles être capitalisées?
Ce que j'ai regardé jusqu'à présent:
La documentation pour Python donne un certain nombre d'exemples; cependant, aucun ne correspond à mon cas exact.
Réponses
Une façon d'utiliser serait la suivante:
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()
Concernant votre question secondaire:
Remarque: toutes les options
ShapeMethod(IntEnum)
doivent-elles être capitalisées?
Cela dépend entièrement de vous. Ils peuvent être tous en majuscules, ce qui est conforme à PEP 8 car ils seront des constantes. Cependant, beaucoup de gens décident de ne mettre en majuscule que la première lettre et c'est un choix de style valide. L'option la moins courante consiste à utiliser toutes les minuscules ou à mélanger différentes capitalisations, mais rien ne vous empêche de le faire. Voir cette réponse pour une référence complète.
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.')
Vous devez vérifier self.shape.value
INSEAD self.shape
lorsque vous cherchez à vérifier la chaîne sous - jacente dans la classe ENUM.
if self.shape.value == 'circle':
Ou
if self.shape == ShapeMethod.circle