코리아 IT아카데미/python 인터넷 강의
ddazua | 27강 상속
by Sharon kim
2021. 10. 4.
'''day27.txt
상속(inheritance)
1. 기존에 사용중인 클래스의 필드 중
새롭게 만들 클래스에서 필요한 것들이 있다면
상속을 받아서 그대로 사용한다.
2. 여러 클래스를 선언할 때 중복되는 기능들이 존재한다면
공통 기능들을 담아놓을 클래스를 선언한다.
부모클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스 : 필드를 전달하는 쪽
자식클래스, 하위 클래스, 서브 클래스, 파생 클래스 : 필드를 전달받는 쪽
상속 문법
class A :
A필드
class B(A,C,D) :
A, B필드
다중 상속
부모 클래스가 한 개가 아닌 여러 개이다. 이러한 기법을 다중 상속이라고 한다.
모호성
여러 부모의 필드 중 같은 이름의 필드를 자식 클래스에서 사용한다면,
어느 부모의 필드인지 알 수가 없기 때문에 이러한 성질을 모호성이라고 한다.
생성자
부모 클래스에 생성자가 선언되어 있고,
자식 클래스에는 기본 생성자가 있다면 부모 클래스 생성자를
자동으로 호출해준다. 하지만 자식 클래스에서 생성자를 직접 선언하면
부모 생성자를 자식 생성자에서 직접 호출해 주어야 한다.
자식 클래스에 생성자가 있을 때
부모에 있는 필드와 자식에서 필요한 필드가 있을 때
부모 생성자를 호출하여 부모 필드를 초기화해주고
추가된 자식 필드를 추가로 초기화 해주어야 할 때
자식 클래스에 생성자가 없을 때(기본 생성자만 있을 때)
부모의 필드 외에 추가적인 필드가 없을 때, 부모 생성자를
그대로 사용한다.
다형성(polymorlphism)
재정의 : 부모 필드에서 수정하고 싶은 메소드는
자식 필드에서 같은 이름으로 재선언할 필요가 있다.
항상 부모 생성자가 먼저 호출되어 부모 필드가 메모리에 할당된다.
먼저 할당된 부모 필드에 a라는 메소드가 있다면, 나중에 할당되는
자식 필드의 a 메소드의 기능(소스코드의 주소값)으로 덮어 씌워 진다.
data = 10 : 부모
data = 20 : 자식
print(data) == 20 출력
'''
# day27>classTest.py
#%% (1) inheritance test
class A:
def __init__(self, data = 10):
self.data = data
print("부모 생성자 호출")
def printData(self):
print(self.data)
def show(self):
print("부모 메소드")
class B(A):
# pass
def __init__(self, data, data2):
#A.__init__(self, data)
super().__init__(data)
# self.data = data
self.data2 = data2
# def printData2(self):
# print(self.data, self.data2)
#Overriding
def printData(self):
print(self.data, self.data2)
# b=B()
# b.printData()
# b.show()
b = B(30, 20)
b.printData()
# b.printData2()