2016-11-04 5 views
-2

저는 OOP에서 Python (ver. 3.5)을 처음 사용합니다. 제네릭 클래스를 만들었으므로이 클래스를 상속받은 새로운 클래스를 만들고 싶습니다.부모 클래스를 상속 한 자식 클래스에서 부모 클래스에 정의 된 클래스 인수 전달

부모 클래스 (예 : A)에는 __init__() 메소드 내에 정의 된 두 개의 arg가 있습니다. 어떻게하면 내 자식 클래스 (예 : B)에있는 사람들을 상속받을 수 있도록 내가 B을 인스턴스화 할 때 나는 그것을 전달할 args를 A에 전달할 수 있습니까? 실제로 실제로 super() 함수를 사용하려고하지만 결과에 대해서는 확신 할 수 없습니다.

나는 아래했지만, 그것은 나에게 TypeError: __init__() takes 1 positional argument but 3 were given

class A(): # parent class 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class B(A): # child class 
    def __init__(self): 
     super().__init__(x, y) 

을 제공합니다 그리고 내가 할 것 (예를 들어) 내 질문의 중복으로 확인되면서 b = B(5, 5)

EDIT 1

this answer, 나는 그것이 왜 다른가, 왜 그 대답이 내 문제를 해결하는 데 도움이되지 않았는가를 언급하고자한다 :

자식 클래스에서 부모 클래스의 매개 변수에 액세스하는 방법에 대해서는 묻지 않지만 부모 클래스가 상속 된 클래스를 인스턴스화 할 수있는 경우에는 해당 호출에 대한 호출과 같이 인수를 전달합니다. 부모님의 수업.

자식 클래스 __init__() 메서드에서 동일한 인수를 다시 정의하지 않는 한 대답은 "할 수 없습니다"입니다. 마지막으로, OOP를 처음 접했을 때 말한 것처럼, 초기 질문은 나에게 이해하기가 너무 어렵 기 때문에 (그리고 심지어 파이썬에서조차도 아니기 때문에) 표시된 대답은 도움이되지 못했다.

+1

당신은 할 수 없습니다. 함수가 취하는 매개 변수를 지정해야합니다. 'B .__ init() __'은 당신이 호출하는 호출 서명을 가지고 있어야합니다. –

+0

괜찮 았기 때문에 클래스 B (A) : def __init __ (self, x, y) super() .__ init __ (x, y)와 같은 일을해야합니다. 그렇지 않으면 부모 클래스를 다시 작성해야합니다. – umbe1987

+0

맞습니다. –

답변

0
class A(): # parent class 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class B(A): # child class 
    def __init__(self, x, y): 
     A.__init__(self, x, y) 

그래서 지금 당신은 B = B 사용할 수 있습니다 (5, 5)

+0

명시 적으로 부모 클래스를 참조하지 말고'super()'를 사용하십시오. –

+0

필자가 명시 적으로 사용하는 것을 좋아하지만, 합당한 인수가 없으면 의견을 수정하십시오. –

+1

부모를 명시 적으로 사용하는 것은 규칙이 아닌 예외가되어야합니다. 그 부모가 바뀌면 어떻게 될까? 또는 여러 단계의 상속이 있다면? 이렇게하면 코드의 유연성이 떨어지고 관용적이지 않게됩니다. –

관련 문제