Rufen Sie eine IntEnum-Klasse in einem Wörterbuch auf

Aug 18 2020

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

4 bad_coder Aug 18 2020 at 00:51

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.

3 EthanFurman Aug 18 2020 at 00:50
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.')
2 Jab Aug 18 2020 at 00:23

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