본문 바로가기

Python/객체지향 프로그래밍

(Python) 객체지향 프로그래밍 - 클래스의 다중 상속

728x90

 

다중 상속이란 여러 기반 클래스로부터 상속을 받아서 파생 클래스를 만드는 방법이다.


다음과 같은 문제점이 있다.


1. 상속받은 여러 기초 클래스에 같은 이름의 멤버가 존재할 수 있다. (충돌 가능)

2. 하나의 클래스를 간접적으로 두 번 이상 상속 받을 수 있다.

 

 

다이아몬드 상속,, 문제가 많다! 부정확함

 

해결책으로 메서드 탐색 순서(Method Resolution Order, MRO)  이용

 

MRO 기법은 복잡한 상속관계를 지닐 때 어떤 클래스의 멤버가 호출되는지 알아볼 수 있는 편리한 방법이다.

 

다중 상속은 가급적 안쓴다...!

 

상속은 가급적 최대 2번까지만!

 

 
# 다중상속에 대한 실습
class Person:
    def __init__(self):
        print("나는 사람입니다.")
    def greeting(self):
        print("Person 클래스의 greeting")

class Student(Person):
    def __init__(self):
        Person.__init__(self)
        print("나는 학생")
    def greeting(self):
        print("Student 클래스의 greeting")
   
class Worker(Person):
    def __init__(self):
        Person.__init__(self)
        print("나는 직장인")
    def greeting(self):
        print("Worker 클래스의 greeting")

# 다중 상속 (다이아몬드 상속)

class PartTimer(Student,Worker):
    def __init__(self):
        Student.__init__(self)
        Worker.__init__(self)
        print("나는 파트타이머")
    # def greeting(self):
    #     print("Parttimer 클래스의 greeting")

parttimer = PartTimer()
print(PartTimer.__mro__)
parttimer.greeting()
 

 

 

 

출처 : 따즈아 파이썬 기초부터 실무까지 제대로 배우기