Rufen Sie eine IntEnum-Klasse in einem Wörterbuch auf
Ich habe ein Beispiel für eine IntEnum-Klasse:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Das muss von der __init__Funktion einer anderen Klasse aufgerufen werden :
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.')
wo muss das self.shapeAttribut sein circle, squareoder NONE.
Die do_something_with_shapeFunktion würde dann aufgerufen von:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
Die Struktur von inputmuss ein Wörterbuch sein, und es ist ziemlich einfach, das festzulegen colour. Ich weiß jedoch nicht, wie ich die IntEnumKlasse in einem Wörterbuch richtig verwenden soll . Zum Beispiel, wenn ich drucken möchtesquares have 4 sides.
Hinweis: Müssen alle Optionen ShapeMethod(IntEnum)aktiviert werden?
Was ich bisher angeschaut habe:
Die Dokumentation für Python enthält eine Reihe von Beispielen. Keiner passte jedoch genau zu meinem Fall.
Antworten
Eine Möglichkeit wäre die folgende:
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()
Zu Ihrer Nebenfrage:
Hinweis: Müssen alle Optionen
ShapeMethod(IntEnum)aktiviert werden?
Es liegt ganz bei Ihnen. Sie können alle Großbuchstaben sein, was mit PEP 8 übereinstimmt, da sie Konstanten sind. Viele Leute entscheiden sich jedoch dafür, nur den ersten Buchstaben in Großbuchstaben zu schreiben, und dies ist eine gültige Wahl des Stils. Die am wenigsten verbreitete Option besteht darin, alle Kleinbuchstaben zu verwenden oder unterschiedliche Groß- und Kleinschreibung zu mischen. Nichts hindert Sie jedoch daran. In dieser Antwort finden Sie eine vollständige Referenz.
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.')
Sie müssen self.shape.valueInsead überprüfen, self.shapewenn Sie die zugrunde liegende Zeichenfolge in der Enum-Klasse überprüfen möchten .
if self.shape.value == 'circle':
Oder
if self.shape == ShapeMethod.circle