Chiama una classe IntEnum dall'interno di un dizionario
Ho una classe IntEnum di esempio:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Questo deve essere chiamato dalla __init__
funzione di un'altra 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.')
dove l' self.shape
attributo deve essere circle
, square
o NONE
.
La do_something_with_shape
funzione verrebbe quindi chiamata da:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
La struttura di input
deve essere un dizionario ed è ragionevolmente semplice impostare l'estensione colour
. Tuttavia, non so come utilizzare correttamente la IntEnum
classe dall'interno di un dizionario. Ad esempio, se voglio stamparesquares have 4 sides.
Nota: tutte le opzioni ShapeMethod(IntEnum)
devono essere in maiuscolo?
Quello che ho visto finora:
La documentazione per Python fornisce una serie di esempi; tuttavia, nessuno si adatta al mio caso esatto.
Risposte
Un modo per utilizzare sarebbe il seguente:
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()
Per quanto riguarda la tua domanda secondaria:
Nota: tutte le opzioni
ShapeMethod(IntEnum)
devono essere in maiuscolo?
Dipende interamente da te. Possono essere tutte maiuscole, il che è in accordo con PEP 8 poiché saranno costanti. Tuttavia, molte persone decidono di mettere in maiuscolo solo la prima lettera ed è una valida scelta di stile. L'opzione meno comune è usare tutte le lettere minuscole o mescolare diverse lettere maiuscole, tuttavia non c'è nulla che ti impedisca di farlo. Vedi questa risposta per un riferimento completo.
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.')
È necessario controllare self.shape.value
INSEAD di self.shape
quando stai cercando di controllare la stringa sottostante nella classe enum.
if self.shape.value == 'circle':
O
if self.shape == ShapeMethod.circle