2013-08-05 2 views
4

새 객체를 생성 할 때 매개 변수를 포함하는 기본 dict가 있어야합니다. 가능한가요, 더 좋은 방법이 있습니까?defaultdict에 의해 생성 된 객체에 매개 변수 전달

defaultdict(myobj, param1) 

는하여 MyObj : 당신이 매개 변수를 사용하여 원하는 매개 변수를 사용하여 인스턴스 객체를 반환하지 않는 새로운 기능을 만들 수 있도록

class myobj(object): 

    def __init__(self, param1): 
     self.param1 = param1 

답변

5

defaultdict은 어떤 호출을합니다.

d = defaultdict(lambda: myobj(param1)) 

또 다른 옵션은 미리 정의 된 매개 변수 중 하나 (또는 ​​그 이상)이있는 함수를 만듭니다 functools.partial을 사용하는 것입니다

import functools 
d = defaultdict(functools.partial(myobj, param1)) 
+3

단지'PARAM1의 범위에 다소 조심해야 할 수도 있습니다 거기에 ... –

+0

+1에 JonClements의 요점. 범위를주의 깊게 살펴 보는 가장 쉬운 방법은 명시 적으로 함수 (/ closure)를'def'로 생성 한 다음 그 함수를'defaultdict'에 전달하는 것입니다. 그렇다면 제대로 디버깅하고 검사 할 수있는 것이 있습니다. – abarnert

+0

나는 람다 (lambda)가 클로저를 가지고 있지 않다는 것을 몰랐다. 누구나'functools.partial'이 더 잘 작동하는지 알 수 있습니까? –