Panggil kelas IntEnum dari dalam kamus
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.shape
atributnya harus circle
, square
atau NONE
.
The do_something_with_shape
Fungsi kemudian akan dipanggil oleh:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
Struktur input
kebutuhan menjadi kamus, dan cukup sederhana untuk mengatur colour
. Namun, saya tidak tahu bagaimana menggunakan IntEnum
kelas 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
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.
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.')
Anda perlu memeriksa self.shape.value
insead self.shape
ketika Anda ingin memeriksa string yang mendasari di kelas enum.
if self.shape.value == 'circle':
Atau
if self.shape == ShapeMethod.circle