: 다른 클래스의 기능을 내 것처럼 사용하자.

class NormalCar:
def drive(self):
print('[NormalCar] drive() called!! ')
def back(self):
print('[NormalCar] back() called!! ')
class TurboCar(NormalCar):
def turbo(self):
print('[TurboCar] turbo() called!! ')
myTurboCar = TurboCar()
myTurboCar.turbo()
myTurboCar.drive()
myTurboCar.back()

Class A:
def __init__(self,Num1,Num2)
print('[A]__init__() called!!')
self.num1 = num1
self.num2 = num2

# 방법1 (강제호출)
class P_Class:
def __init__(self,pNum1,pNum2):
print('[P_Class] __init__() called!!')
self.pNum1 = pNum1
self.pNum2 = pNum2
class C_Class(P_Class):
def __init__(self,cNum1,cNum2):
print('[C_Class] __init__() called!!')
P_Class.__init__(self,cNum1,cNum2) #강제호출
self.cNum1 = cNum1
self.cNum2 = cNum2
cls = C_Class(10,20)
#방법2
class P_Class:
def __init__(self,pNum1,pNum2):
print('[P_Class] __init__() called!!')
self.pNum1 = pNum1
self.pNum2 = pNum2
class C_Class(P_Class):
def __init__(self,cNum1,cNum2):
super().__init__(cNum1,cNum2) #super는 self값 안넣어도됨
P_Class.__init__(self,cNum1,cNum2) #강제호출
self.cNum1 = cNum1
self.cNum2 = cNum2
cls = C_Class(10,20)
[실습] : 중간고사 클래스와 기말고사 클래스를 상속관계로 만들고 각 점수를 초기화 + 총점,평균 반환 기능 만들기
class MidExam:
def __init__(self,s1,s2,s3):
print('[MidExam] __init__()')
self.mid_kor_score = s1
self.mid_eng_score = s2
self.mid_mat_score = s3
def printScores(self):
print(f'mid_kor_score: {self.mid_kor_score}')
print(f'mid_eng_score: {self.mid_eng_score}')
print(f'mid_mat_score: {self.mid_mat_score}')
class FinExam(MidExam):
def __init__(self,s1,s2,s3,s4,s5,s6):
print('[FinExam] __init__()')
super().__init__(s1,s2,s3)
self.fin_kor_score = s4
self.fin_eng_score = s5
self.fin_mat_score = s6
def printScores(self):
super().printScores()
print(f'fin_kor_score: {self.fin_kor_score}')
print(f'fin_eng_score: {self.fin_eng_score}')
print(f'fin_mat_score: {self.fin_mat_score}')
def getTotalScore(self):
total = self.mid_kor_score + self.mid_eng_score + self.mid_mat_score
total += self.fin_kor_score + self.fin_eng_score + self.fin_mat_score
return total
def getAverageScore(self):
return self.getTotalScore() / 6
exam = FinExam(85,90,20,30,40,50)
exam.printScores() #중간,기말 과목별 점수
print(f'총점: {exam.getTotalScore()}')
print(f'평균: {round(exam.getAverageScore(),2)}')
: 2개 이상의 클래스를 상속하는 경우
단, 주의할점은 중복코드가 있으면 헷갈릴 수도 있기 때문에 다중상속을 남발하면 안좋음!
: 하위 클래스에서 상위 클래스의 매서드를 재정의(override)
from abc import ABCMeta
from abc import abstractmethod
class AirPlane(metaclass=ABCMeta):
@abstractmethod
def flight(self):
pass
def forward(self):
print('전진')
def backward(self):
print('후진')
class Airliner(AirPlane):
def __init__(self,c):
self.color = c
def flight(self):
print('시속 500')
al = Airliner('red')
al. flight()
al. backward()
al. forward()