최종 사용자가 호출 할 함수가 있으며이 함수는 1에서 3까지의 int 인수를받습니다. int에 따라 함수가 별도의 하위 메서드를 실행하기를 원합니다. 나는 일반적으로 아래와 같이 if 문으로 이것을 할 것이지만을 사용하여 이것을 수행하는 더 깨끗하고 비단뱀적인 방법을 찾고 Enum
있습니다.
def user_function(user_arg: int) -> float:
if user_arg == 1:
return sub_method_1()
elif user_arg == 2:
return sub_method_2()
elif user_arg == 3:
return sub_mthod_3()
print(f"Error: user_arg must be in [1,2,3]. Supplied argument: {user_arg}")
이상적으로 함수는 다음과 같습니다.
from enum import Enum
class UserMethod(Enum):
FIRST_METHOD = 1
SECOND_METHOD = 2
THIRD_METHOD = 3
def choose_method(self):
#... use enum to choose from the 3 sub methods ...
# This function is now much cleaner
def user_function(user_arg: int) -> float:
um = UserMethod(user_arg)
return um.choose_method()
Enum
이 작업을 수행하는 방법에 대해 사용 하는 방법 에 대해 혼란 스럽습니다 . 또는 이것이 최선의 방법인지 여부는 무엇입니까?
현재이 작업을 수행하는 가장 깨끗한 방법은 aenum
라이브러리 1 을 사용하는 것입니다 .
from aenum import Enum
class UserMethod(Enum):
#
_init_ = 'value method'
#
def __call__(self, *args, **kwds):
return self.method(*args, **kwds)
#
def first(blah):
return blah
#
def second(spam=2):
return spam
#
def third(this, that):
return this, that
#
FIRST_METHOD = 1, first
SECOND_METHOD = 2, second
THIRD_METHOD = 3, third
각 메서드는 열거 형 멤버 자체에 저장되며 멤버를 호출하면 해당 함수에 대한 호출이 전달됩니다.
--> list(UserMethod)
[<UserMethod.FIRST_METHOD: 1>, <UserMethod.SECOND_METHOD: 2>,
<UserMethod.THIRD_METHOD: 3>]
--> UserMethod.THIRD_METHOD("hello", "world")
('hello', 'world')
과
# This function is now much cleaner
def user_function(user_arg: int) -> float:
return UserMethod(user_arg).method
1 공개 : 저는 Python stdlibEnum
, enum34
backport 및 Advanced Enumeration ( aenum
) 라이브러리 의 작성자입니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다