반응형
질문
이에 대한 명확한 답변을 찾을 수 없습니다. 제가 알기로는 Python 클래스에서 __init__
함수를 여러 개 가질 수 없습니다. 그렇다면 이 문제를 어떻게 해결할까요?
number_of_holes
속성을 가진 Cheese
클래스가 있다고 가정해 봅시다. 이러한 방식으로 치즈 객체를 생성하는 두 가지 방법이 필요합니다...
num_holes = 15
와 같은 구멍 수를 입력 받는 방법:parmesan = Cheese(num_holes = 15)
.- 인수를 입력받지 않고
number_of_holes
속성을 무작위로 생성하는 방법:gouda = Cheese()
.
이를 수행하는 유일한 방법은 다음과 같지만, 이 방법은 복잡해 보입니다:
class Cheese():
def __init__(self, num_holes = 0):
if (num_holes == 0):
# number_of_holes를 무작위로 생성
else:
number_of_holes = num_holes
어떻게 생각하시나요? 다른 방법이 있을까요?
답변
사실 None
은 "마법" 값에 대해 훨씬 더 좋습니다:
class Cheese():
def __init__(self, num_holes = None):
if num_holes is None:
...
이제 더 많은 매개변수를 자유롭게 추가하려면:
class Cheese():
def __init__(self, *args, **kwargs):
#args -- 익명 인수의 튜플
#kwargs -- 이름이 지정된 인수의 딕셔너리
self.num_holes = kwargs.get('num_holes',random_holes())
*args
와 **kwargs
개념을 더 잘 설명하기 위해 (이름을 변경할 수 있음):
def f(*args, **kwargs):
print 'args: ', args, ' kwargs: ', kwargs
>>> f('a')
args: ('a',) kwargs: {}
>>> f(ar='a')
args: () kwargs: {'ar': 'a'}
>>> f(1,2,param=3)
args: (1, 2) kwargs: {'param': 3}
반응형
댓글