2012-11-22 11 views
1

다시 입력하지 않고 기능/방법을 대체. 기본적으로 나는 10 개의 인자를 가진 함수를 가진 클래스를 가지고 있고, 그것을 확장하는 많은 클래스를 가질 생각이다. 그래서 매번 인자를 타이핑하지 않기를 바랄 것이다. 제발 모든 주장의 목록/사전을 전달하라고 말하지 마세요.파이썬은 "자기, X, Y, Z"를 다시 입력하지 않고 f를 재정의하는 것이 가능 I가</p> <pre><code>class A: def f(self, x, y, z): # do something with x, y, z </code></pre> <p>이 함수 인수를 예

+0

귀하의 질문에 따라 모든 arguments'의 목록/사전을 통과'에 문제가 – avasal

+0

귀하의 코드 예제는 최우선이 없습니다. 아마도 당신은 당신의 질문을 더 명확하게하기 위해'클래스 B (A)'를 도입 할 수 있습니다. –

답변

3

아니요. 재정의 된 함수가 동일한 인수를 갖도록하려면 동일한 인수를 입력해야합니다. 다른 인수를 갖도록 재정의 할 수 있으므로 같은 인수를 갖기를 마술처럼 알 수있는 방법이 없습니다.

이 문제를 피하는 유일한 방법은 *args 및/또는 **kwargs을 사용하는 것입니다.하지만 그렇게하고 싶지는 않은 것으로 보입니다. (또한,이되지 않습니다 꽤 실제로 잘못된 인수로 호출하면 여기서/오류가 발생하는 경우의 관점에서 오른쪽 인수 함수를 정의한다. 동일) 그것은 진정한 최우선이 아니다

2
class A: 
    def facade_f(self, x, y, z): 
     self._real_f({'x': x, 'y': y, 'z': z}) 

    def _real_f(self, params): 
     # do something with params['x'], params['y'], params['z'] 

class B(A): 
    def _real_f(self, params): 
     # do something with params['x'], params['y'], params['z'] 

, 그러나 모든 명명 된 매개 변수로 멋진 인터페이스를 노출하고 facade_f 메서드에서 해당 유형과 값을 확인할 수 있으며 확장 할 때 거의 입력하지 않아도됩니다.

근무 예 :

class A: 
    def facade_f(self, x, y, z): 
     self._real_f({'x': x, 'y': y, 'z': z}) 

class B(A): 
    def _real_f(self, params): 
     print params['x'], params['y'], params['z'] 

B().facade_f(1, 2, 3) 
관련 문제