다중상속
부모가 여러개가 있는 상속방식
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
'IT 공부 > python' 카테고리의 다른 글
2020-10-12 Python 과 Ruby Package Manager (0) | 2020.10.12 |
---|---|
2020-10-12 Python 과 Ruby 믹스인 (0) | 2020.10.12 |
2020-10-11 Python 과 Ruby 객채의 모듈화 (0) | 2020.10.11 |
2020-10-10 Python 과 Ruby 재정의 OverRide (0) | 2020.10.10 |
2020-10-09 Python 과 Ruby 클래스 맴버 / 클래스 변수 (2) (0) | 2020.10.09 |