2010-05-04 7 views
2

이것은 내가 볼 것으로 예상 결과가 없습니다. 나는 kwargs가 args에 삽입되는 이유를 모르지만 서브 클래스에서 __init__()을 잘못 호출했다고 가정합니다. 아니면 그냥 할 수없는 일을하려고합니다.파이썬 새로운 스타일의 클래스와 슈퍼 기능

팁이 있습니까?

답변

14

대신을 시도해보십시오

super(B, self).__init__(*args, **kwargs) 

A의 init 함수가 실제 인수/kwargs로 (그리고 두 인수를) 예상되기 때문에, 당신은 실제로 그것을 인수/kwargs로의 압축을 푼 버전을 통과해야 있도록 그들은 제대로 재 포장 될거야.

그렇지 않으면 kwargs의 args와 dict의 이미 압축 된 목록이 목록과 dict을 전달한다는 사실 때문에 두 개의 요소가있는 args 목록과 빈 kwargs dict로 다시 채워집니다. , 명명되지 않은 실제 매개 변수 대신 명명 된 매개 변수.

+0

omg와 같이 간단히 정의 할 수 있다는 것입니다. 나는 지금 정말로 어리 석다. 그것 * 간단했다 !! !!? 예! 그것은 일했다! 정말 고맙습니다! – jedmao

2

나는 Dav와 완전히 동의하지만, B의 __init__에 super를 호출하는 것 이상의 다른 목적이 없다면, 안전하게 생략 할 수 있다는 것을 알고 있습니까? 제 말은 여러분의 예제에서 B를

>>> class B(A): 
...  pass 
+1

예. 나는 그것을 알고있다. 고맙습니다. 그래도 __init__ 기능을 확장하고자했습니다. – jedmao