2011-03-12 5 views
2

많은 속성 (약 10)을 가진 클래스를 만들려고합니다. 보다 클래스 시작하는 예쁜 (더 파이썬) 방법이있다 :많은 속성을 가진 파이썬 클래스

class myClass: 
def __init__(self,atributeA,atributeB,atributeC) 
    self.atributeA=atributeA 
    self.atributeB=atributeB 
    self.atributeC=atributeC 

는 당신이 * 인수 또는 ** kwargs로 사용할 수

thisInstance=myClass(valueA,valueB,valueC) 

답변

2

글쎄 키워드 인수를 사용할 수 있습니다.

thisInstance=myClass(atributeA=valueA, atributeB=valueB, atributeC=valueC) 

다음과 같은 간단한 이점이 있습니다. 원하는 모든 순서로 값을 전달할 수 있다는 것입니다.

클래스 정의를 전혀 수정할 필요조차 없습니다. 클래스의 중요한 속성과 동일한 이름을 가진 DICT 내 모든 속성은 중요 속성을 덮어 쓸 것입니다,하지만

def __init__(self, *args, **kwargs): 
    self.__dict__.update(kwargs) 


d = {"attributeA": "a", "attributeB": "b"} 
c = MyClass(**d) 

참고 :

+1

나는 클래스 인스턴스를 생성하기위한이 솔루션을 좋아한다. 클래스 내에서 속성을 설정하는 데 도움이되는지 확신 할 수 없습니다. –

0

보다 클래스 인스턴스를 만들 수있는 더 좋은 방법이있다 터플이나 사전을 매개 변수와 함께 보내십시오.

+0

그건 ... 어수선해. 당신은 실제로 당신이 원하는만큼 많은 매개 변수를 갖도록해야한다. 튜플로부터 가져와야한다 .... 가변 키워드 인수의 경우에는 키가 거기에 있는지 확인해야한다. 그렇지 않다. –

1

당신은 너무 더러운 방법을 사용할 수 있습니다.

편집 : 내가 이해할 수없는 경우, 더러운 의미는 환상적인 이유가 있고 수업을 다른 사람들이 오용 할 수 없다면 말하지 않는 것입니다.

0

초기화에는 다음을 사용할 수 있습니다.

def __init__(self, attributeA, attributeB, attributeC) 
    vars(self).update(locals()) 
+0

지역 주민의 하위 집합 만 추가 할 수 있습니까? –

+0

예 :'vars (self) .update (부분 집합 (locals(), validInputsList))' 은 [link]를 통해'subset'과 같은 형태로 나타납니다. http://code.activestate.com/recipes/115417-subset-of-a-dictionary/) –

관련 문제