2012-03-27 8 views
4

인스턴스를 만들고 싶고 __init__ 정의에 많은 매개 변수 (10 개 이상)가있는 파이썬 클래스가 있습니다. __init__이 많은 매개 변수를 사용하는 클래스를 인스턴스화하는 깨끗한 방법이 있습니까? 예를 들어파이썬에서 객체 인스턴스화하기

:

class A(object): 

    def __init__(self, param1, param2, param3,...param13): 
    // create an instance of A 


my_a = new A(param1="foo", param2="bar", param3="hello"....) 

이 할 수있는 청소기 방법이 있나요? 사전이나 뭐라도 나눠주고 싶어? 아니면 더 나은 컨벤션이 있을까요?

+3

왜 init에는 매개 변수가 너무 많습니까? –

+1

나는 진짜로 당신의 params가 진짜로 지명되지 않기를 바란다! – ThiefMaster

답변

6

예, 당신은 매개 변수를 수집하기 위해 dict를 사용할 수 있습니다

class A(object): 
    def __init__(self, param1, param2, param3): 
     print param1, param2, param3 


params = {'param1': "foo", 'param2': "bar", 'param3': "hello"} 
# no 'new' here, just call the class 
my_a = A(**params) 

파이썬 튜토리얼의 unpacking argument lists 섹션을 참조하십시오.

또한 //은 Python에서 주석이 아닙니다. 바닥 분할입니다. # 님이 댓글입니다. 여러 줄 주석의 경우 '''You can use triple single quotes''' 또는 """triple double quotes"""입니다.

3

Python에는 new 키워드가 없습니다. 함수처럼 클래스 이름을 호출합니다.

당신은 예를 들어, **와 사전을 앞에 붙여 사전을 사용하여 키워드 인수를 지정할 수 있습니다

:

options = { 
    "param1": "foo", 
    "param2": "bar", 
    "param3": "baz" 
} 

my_a = A(**options) 

당신이하지 않는 사전을 사용하여 한 번에 모든 값을 정의 할 거라면 정말 그들을 지정 직접적 동안 clairity을 위해 여분의 공백을 사용하는 동안 당신에게 어떤 이점을 줄 : 일반적으로

my_a = A(
    param1 = "foo", 
    param2 = "bar", 
    param3 = "baz" 
) 
+1

'args'라고해서는 안됩니다. 파이썬의 규칙은'args'가 'dict'이 아닌 위치 매개 변수의 목록이되도록하는 것입니다. – agf

+0

@agf 제안 해 주셔서 감사합니다. 나는 그것을 바꿨다. –

+0

한번에 모두 정의하는 것과 관련하여 - 여러 매개 변수에서 동일한 매개 변수를 사용하려는 경우 'dict'을 사용하면 코드에 한 번만 넣어야합니다. – agf

1

을, 많은 매개 변수는 클래스가 너무 복잡하고 분할되어야 기호가 종종 있다는 데.

해당 사항이 없으면 사전이나 특수 매개 변수 개체를 전달하십시오.

3

생성자에 인수가 너무 많아서 좋지 않습니다. 그러나 이것을 원하면 다음을 시도하십시오 :

class A(object): 
    def __init__(self, *args,**kwargs): 
     """ 
     provide list of parameters and documentation 
     """ 
     print *args, **kwargs 
params = {'param1': "foo", 'param2': "bar", 'param3': "hello"} 
a = A(**params) 
관련 문제