2017-12-24 17 views
1

많이 입력하지 않고 수퍼 클래스의 인스턴스를 사용하여 서브 클래스를 어떻게 정의 할 수 있습니까? 참조 :더 적은 키 입력으로 서브 클래스 만들기

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

class B(A): 
    def __init__(self,x,y,z): 
     A.__init__(A,x,y) 
     self.z=z 

class1=A(2,3) 
class2=B(class1.x,class1.y,5) # Is there something easier than this, where I don't have to type class1.x, class1.y and 
           # I can just pass all the data members of class1 at once? 
+0

음,'Class2의 = B (2,3,5)'를? –

+0

그것은 많은 것 (불필요한) 타이핑처럼 보이지 않습니다. x, y, z..foobar, quxx가 있다면 시퀀스의 사용 등을 나타낼 수 있습니다. kwargs가 때때로 패스로 사용됩니다. (명확성과 직접적인 매개 변수를 희생시키면서), 그렇지만 그것이 어땠는지는 잘 보인다. – user2864740

+0

이 예제에서는'A'의 인스턴스를'B .__ init __()'에 전달할 수 있습니다. –

답변

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

class B(A): 
    def __init__(self,a,z): 
     self.a=a 
     self.z=z 

class1=A(2,3) 
class2=B(class1,5) 
+0

이것은 상속이 아닌 * 준 합성이며,'x'와'y' 속성을 제외하고 B에 대해 호출 된 메소드 A를 중단시킵니다. 클래스 B *가 A를 확장하지 않으면, 특히 A에 대한 이니셜 라이저가 호출되지 않으므로 혼동이 덜 생깁니다 (예 : 전체 구성). – user2864740

+0

B의 메소드는 self.x 대신에 self.a.x를 사용하도록 수정되어야합니다. –

+0

내가 빠진 것이 있습니까? A의 이니셜 라이저는 확실히 다음과 같이 호출됩니다 :'class1 = A (2,3)' –