2016-10-12 2 views
2

상속 된 메서드에서 키워드 인수가 특별히 처리됩니다?수퍼 클래스에서 키워드 인수가있는 Python 2.7 함수 : 하위 클래스에서 액세스하는 방법?

정의 된 클래스의 키워드 인수를 사용하여 인스턴스 메서드를 호출하면 모두 잘됩니다. 내가 서브 클래스에서 그것을 호출 할 때, 파이썬은 너무 많은 매개 변수를 전달한다고 불평합니다.

다음은 예제입니다. "간단한"메서드는 키워드 args를 사용하지 않으며 상속은 잘 작동합니다 (심지어 나를 위해 :-) "KW"메서드는 키워드 args를 사용하고 상속은 더 이상 작동하지 않습니다 ... 적어도 나는 차. 내가 예상대로

class aClass(object): 
    def aSimpleMethod(self, show): 
    print('show: %s' % show) 
    def aKWMethod(self, **kwargs): 
    for kw in kwargs: 
     print('%s: %s' % (kw, kwargs[kw])) 

class aSubClass(aClass): 
    def anotherSimpleMethod(self, show): 
    self.aSimpleMethod(show) 
    def anotherKWMethod(self, **kwargs): 
    self.aKWMethod(kwargs) 

aClass().aSimpleMethod('this') 
aSubClass().anotherSimpleMethod('that') 
aClass().aKWMethod(show='this') 

인쇄 this, thatthis. 그러나

aSubClass().anotherKWMethod(show='that') 

예외 : 일단

self.aKWMethod(**kwargs) 

:

당신은 당신이 메서드를 호출 할 때 ** kwargs로를 사용할 필요가
TypeError: aKWMethod() takes exactly 1 argument (2 given) 

답변

1

self.aKWMethod(kwargs)을 수행하면 (수퍼 클래스의) aKWMethod 메소드에 대한 단일 위치 인수로 키워드 인수 전체를 전달합니다.

self.aKWMethod(**kwargs)으로 변경하면 예상대로 작동합니다.

+0

어리석은 실수 - 설명서가 가끔 도움이됩니다! 감사! – virtualnobi

1

, 그것은 어떤 위치 인수, 단지 키워드 인수을지지 않습니다 당신은 잘 작동합니다 :

In [2]: aClass().aSimpleMethod('this') 
    ...: aSubClass().anotherSimpleMethod('that') 
    ...: aClass().aKWMethod(show='this') 
    ...: 
show: this 
show: that 
show: this 
1

가능한 가장 단순한 용어를 설명하기 위해이 오류는 상속과는 아무 관련이 없습니다. 다음과 같은 경우를 생각해

>>> def f(**kwargs): 
...  pass 
... 
>>> f(a='test') # works fine! 
>>> f('test') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() takes 0 positional arguments but 1 was given 

점은 **kwargs 키워드 인수 수와 위치 인수로 대체 될 수 없다는 것입니다.

관련 문제