Panggil kelas IntEnum dari dalam kamus

Aug 18 2020

Saya punya contoh kelas IntEnum:

class ShapeMethod(IntEnum):
    NONE = 0
    circle = 1
    square = 2

Itu perlu dipanggil oleh __init__fungsi kelas lain:

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.')

di mana, self.shapeatributnya harus circle, squareatau NONE.

The do_something_with_shapeFungsi kemudian akan dipanggil oleh:

input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape

Struktur inputkebutuhan menjadi kamus, dan cukup sederhana untuk mengatur colour. Namun, saya tidak tahu bagaimana menggunakan IntEnumkelas dengan benar dari dalam kamus. Misalnya jika saya ingin mencetaksquares have 4 sides.

Catatan: Apakah semua opsi ShapeMethod(IntEnum)perlu menggunakan huruf besar?


Apa yang telah saya lihat sejauh ini:

The dokumentasi untuk Python memberikan sejumlah contoh; namun, tidak ada yang cocok dengan kasus saya.

Jawaban

4 bad_coder Aug 18 2020 at 00:51

Salah satu cara untuk menggunakannya adalah sebagai berikut:

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()

Mengenai pertanyaan sampingan Anda:

Catatan: Apakah semua opsi ShapeMethod(IntEnum)perlu menggunakan huruf besar?

Ini sepenuhnya terserah Anda. Semuanya bisa berupa huruf besar semua, yang sesuai dengan PEP 8 karena mereka akan menjadi konstanta. Namun, banyak orang memutuskan untuk hanya menggunakan huruf pertama dan itu adalah pilihan gaya yang valid. Opsi yang paling tidak umum adalah menggunakan semua huruf kecil atau mencampurkan huruf besar yang berbeda, namun tidak ada yang menghentikan Anda untuk melakukannya. Lihat jawaban ini untuk referensi lengkap.

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

Anda perlu memeriksa self.shape.valueinsead self.shapeketika Anda ingin memeriksa string yang mendasari di kelas enum.

if self.shape.value == 'circle':

Atau

if self.shape == ShapeMethod.circle