IT 공부/python

2020-10-11 Python 과 Ruby 다중상속

JONGI-N CHOI 2020. 10. 11. 13:35

다중상속

부모가 여러개가 있는 상속방식

Python에서는 다중상족이라는 기능을 제공하지만

Ruby에서는 제공하지 않는다. 하지만, 비슷한 기능을하는 믹스인 기능이있다. 

 

 

class C1():
    def c1_m(self):
        print("c1_m")

class C2():
    def c2_m(self):
        print("c2_m")

class C3(C1, C2):
    pass

c = C3()
c.c1_m()
c.c2_m()

*pass는 class 안에 아무 method도 없을 경우 오류가 나기 때문에 방지하기위해서 주는 것이다.

 

 

다중상속하는 법

class C3(C1, C2):

기존 상속하는 방법에 " ,"'를 찍어서 여러개의 객체를 상속하면 된다. 

 

C3이라는 class에는 아무런 method가 존재하지 않지만, C1과 C2에 있는 method를 가져다 쓸 수 있게 된다.

 

 

 

 

하지만, 다중상속에서는 문제점이 존재한다. 

서로 다른 부모에 중복되는 이름의 method가 존재할 수 있음 -> 그래서 제한적으로 사용하거나 지원하지 않는 언어도 많음

 

-> 그래서 많이 쓰이지 않는다.

 

<Class C1>

def m(self):
        print("c1 m")

<Class C2>

def m(self):
        print("c2 m")

 

Class  C1,C2에 모두 m() 이라는 method가 존재한다. 

 

C3의 instance인 c가 m().을 호출하게 되면 ??  우선순위에서 앞에있는 class의 m()가 호출되게 된다.

 

우선순위를 알려주는 함수

print(C3.__mro__)

결과값

(<class '__main__.C3'>, <class '__main__.C1'>, <class '__main__.C2'>, <class 'object'>)

앞에 나온 순서대로 우선순위가 된다  C3 > C1 > C2 >Object