2016-07-25 4 views
0

나는 하나의 클래스로 여러 부모 클래스에서 상속하고 있습니다. 내가하려고하는 것은 객체 데이터 충돌 상황을 만드는 것이다.Python3, OOP : 단일 클래스로 다중 클래스 상속

두 클래스가 동일한 이름과 다른 데이터를 가진 변수를 보유하고있는 경우, 그 변수가 그림에 오게되면 파이썬에 의해로드 될 것입니다. pac 대신 클래스 cac의 : 나는 var2 데이터가 부모 클래스에서 고려해야 할 것 같다

>>> class pac: 
... var=10 
... var2=20 
... 
>>> class cac: 
... var3=30 
... var2=10 
... 

>>> pob=pac() 
>>> cob=cac() 
>>> pob.var 
10 
>>> pob.var2 
20 
>>> cob.var2 
10 
>>> cob.var3 
30 
>>> class newclass(pac,cac): 
... def sum(self): 
... sum=self.var+self.var2 
... sum2=self.var2+self.var3 
... print(sum) 
... print(sum2) 
... 
30 
50 
>>> nob.var 
10 
>>> nob.var2 
20 
>>> nob.var3 
30 
>>> 

을 한 일

.

동일한 변수 이름이 다른 데이터와 함께 존재하는 경우 Python을 만들기 위해 수행해야 할 작업은 대신 cac의 데이터를 고려해야합니까? 상속의 순서를 바꾸라고 제안하지 마십시오.

감사합니다.

+1

가능한 복제 [방법 해상도 ​​주문 새로운 스타일의 파이썬 클래스에서 (MRO)] (HTTP : // 유래 .com/questions/1848474/method-resolution-order-mro-in-new-style-python-classes) –

+0

데이터는 상속 순서로로드되므로 가장 쉽게 변경할 수 있습니다. 그 일을하고 싶지 않으므로 질문을 명확히 할 수 있습니까? 'newclass'에서'cac'의'var2'에 접근하는 방법을 묻고 있습니까? –

+0

아마도 흥미로운 링크 : https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ https://www.youtube.com/watch?v=EiOglterPEo – GingerPlusPlus

답변

2

상속 순서를 변경하지 않고 하위 클래스는 항상 첫 번째 클래스에서 찾을 수있는 특성을 첫 번째 클래스에서 가져옵니다. 해당 값이 두 번째 클래스에 있는지 알아 보려면 두 번째 클래스의 값을 명시 적으로 요청해야합니다. 내가 명시 적으로 cac의 VAR2에 대한 부탁 해요

class newclass(pac,cac): 
    @property 
    def var2(self): 
     return cac.var2 

주처럼 경우

, 뭔가.

1

당신은 또한 다음과 같은 코드를 사용하여 가능한 값의 목록/튜플을 반환 할 수 다음 mro 방법은 클래스의 목록을 반환

@property 
    def var2(self): 
     key='var2' 
     return [getattr(c,key) for c in self.__class__.mro()[1:-1] if hasattr(c,key)] 

것은, 첫 번째는 부모와 다음에 호출자 클래스 될 것입니다 마지막으로 object 내장 클래스. 이 코드는 상속의 순서로 값 목록을 반환합니다.

2

당신 수있는합니다 NewClass의 초기화 방법에 self.var2 = cac.var2을 설정

class newclass(pac, cac): 
    def __init__(self): 
     self.var2 = cac.var2