Вызов класса IntEnum из словаря
У меня есть пример класса IntEnum:
class ShapeMethod(IntEnum):
NONE = 0
circle = 1
square = 2
Это должно быть вызвано __init__
функцией другого класса:
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.')
где self.shape
должен быть атрибут circle
, square
или NONE
.
Затем do_something_with_shape
функция будет вызываться:
input = {"colour" = blue}
my_object = ExampleClass(look_at_shape=input)
my_object.do_something_with_shape
Структура input
должна быть словарем, и установить colour
. Однако я не знаю, как правильно использовать IntEnum
класс из словаря. Например, если я хочу напечататьsquares have 4 sides.
Примечание: все ли варианты ShapeMethod(IntEnum)
должны быть написаны с заглавной буквы?
На что я смотрел до сих пор:
В документации по Python есть несколько примеров; однако ни один из них не подходит под мой случай.
Ответы
Один из способов использования был бы следующим:
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()
Относительно вашего побочного вопроса:
Примечание: все ли варианты
ShapeMethod(IntEnum)
должны быть написаны с заглавной буквы?
Это полностью зависит от вас. Все они могут быть в верхнем регистре, что соответствует PEP 8, поскольку они будут константами. Однако многие люди решают использовать только первую букву с заглавной буквы, и это правильный выбор стиля. Наименее распространенный вариант - использовать все строчные буквы или смешивать разные заглавные буквы, однако ничто не мешает вам это сделать. См. Этот ответ для получения полной справки.
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.')
Вам нужно проверить self.shape.value
внутри, self.shape
когда вы хотите проверить базовую строку в классе enum.
if self.shape.value == 'circle':
Или же
if self.shape == ShapeMethod.circle