사전 내부에서 IntEnum 클래스 호출

Aug 18 2020

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)대문자로 표기해야합니까?


지금까지 내가 본 것 :

문서 파이썬은 많은 예제를 제공합니다; 그러나 내 경우에 맞는 것은 없습니다.

답변

4 bad_coder Aug 18 2020 at 00:51

사용하는 한 가지 방법은 다음과 같습니다.

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과 일치합니다. 그러나 많은 사람들이 첫 글자 만 대문자로하기로 결정하고 올바른 스타일 선택입니다. 가장 일반적인 옵션은 모두 소문자를 사용하거나 다른 대문자를 혼합하는 것입니다.하지만 그렇게하는 것을 막을 수는 없습니다. 전체 참조는이 답변을 참조하십시오.

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

enum 클래스의 기본 문자열을 확인하려는 경우 self.shape.valueinsead 를 확인해야합니다 self.shape.

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

또는

if self.shape == ShapeMethod.circle