[python]_클래스(3)_상속

Hi K·2022년 10월 17일
0

파이썬기초

목록 보기
12/12

상속

상속은 부모 클래스의 정보를 활용해 자식 클래스를 이끌어내는 것을 의미합니다.

문법은

class 클래스명(부모클래스):
    내부 정의
    ...

현실에서의 상속과 마찬가지로 프로그래밍의 상속에서도 부모는 자식에게
자신이 가진 요소를 물려줍니다.(변수, 메서드)

현실과 다른점은 프로그래밍의 상속은 자식이 부모를 지목해 이뤄지며
부모쪽에서 물려받은 변수, 메서드 및 자식쪽에서 새로 정의한 변수,
메서드 그리고 물려받은 메서드를 재정의(오버라이딩)해 사용할 수 있습니다.


class Person:
    name = ""
    age = 0
    height = 0
    
p1 = Person()
p1.name = "홍길동"
p1.age = 20
p1.height = 170
print(p1.name, p1.age, p1.height)

# Student는 Person의 상속을 받았음
class Student(Person):
    major = ""
  
# Student를 하나 생성해서 Person처럼 print로 모든 변수에 값을 저장한 뒤 찍어보세요.
s1 = Student()
s1.major = "경영"
s1.name = "유재석"
s1.age = 23
s1.height = 180

print(s1.major, s1.name, s1.age, s1.height)

자료구조를 아래와 같이 그릴수 있다

(연습)

# 샐러리맨 클래스를 선언해주세요(Person을 상속받습니다.)
# 샐러리맨은 연봉을 가집니다.
# 샐러리맨 객체를 생성해주세요.
# 이름은 여러분들 이름으로 해 주시고
# 기타 인적사항은 원하는대로 입력해주시고
# *연봉은 받고 싶은 금액을 적어주세요.

class Man(Person):
    salary = 0
    
m1 = Man()
m1.salary = 200000000
m1.name = "김연봉"
m1.age = 23
m1.height = 180

print("이름 : %s    나이 : %s    신장 : %s    연봉 : %s" 
% (m1.name, m1.age, m1.height, m1.salary))


오버라이딩

오버라이딩이란 부모가 물려준 메서드를 자식쪽에서 고쳐서 쓰는 것을 의미합니다.

위와 같이 부모쪽에서 이미 특정 메서드가 생성되었지만, 자식쪽에서 추가된 사항을 따로 반영하지 못한다던지 하는 이슈가 발생했을 때

자식쪽에서 물려받은 메서드를 고쳐서 현재 객체 상황에 맞게 쓰는 것을 오버라이딩이라고 합니다

방법은 자식쪽 클래스 설계부분에 부모쪽과 동일한 메서드를 작성하고

코드 내용을 새롭게 작성하면 됩니다.

class Airplane:
    velocity = 0
    gas = 0
    flight_number = ""
    
    # 생성자를 만들어주세요. 위 3개 변수를 모두 입력해야 생성됩니다
    def __init__(self, velocity, gas, flight_number):
        self.velocity = velocity
        self.gas = gas
        self.flight_number = flight_number
        
    # 비행기의 비행기능을 만들어보겠습니다.
    def fly(self):
        # if문을 이용해서 최대속도를 900으로 맞춰주세요.
        # 이와 더불어 연료가 0이면 작동하지 않게 해주세요.
        if (self.gas <=0):
            print("연료가 없습니다.")
            return # break문 처럼 즉시 함수를 종료시킨
        if(self.velocity + 200 > 900):
            self.velocity = 900
        else:
            self.velocity += 200
        self.gas -= 100
        
        
    # 여러분들이 비행기의 브레이크 기능을 만들어주세요
    # 실행시 연료는 소비하지 않지만 속도가 200씩 차감됩니다.
    def break_01(self):
        # 최저속도를 0으로 만들어주세요.
        if (self.velocity-200 < 0):
            self.velocity = 0
        else:
            self.velocity -= 200
        
    # 비행기의 현재 상태 
    def get_info(self):
        print("현재 속도 : %skm/h, 현재 연료량 : %sL, 편명 : %s" 
        % (self.velocity, self.gas, self.flight_number))
ap1 = Airplane(0, 5000, "KE889")
ap1.get_info()

ap1.fly()
ap1.get_info()

ap1.break_01()
ap1.get_info()

# 초음속비행기(SupersonicAirplane)을 선언해주세요. (Airplane을 상속합니다.)

class SupersonicAirplane(Airplane):
    # 오버라이딩은 부모에게 물려받은 메서드가 마음에 안 들때
    # 새롭게 정의하는 것을 의미합니다.
    # 같은 이름, 같음 파라미터선언으로 정의하면 됩니다
    def fly(self):
        # 메서트명과 파라미터는 동일하나 코드가 바뀜
        if (self.gas <=0):
            print("연료가 없습니다.")
            return # break문 처럼 즉시 함수를 종료시킨
        if(self.velocity + 200 > 2000):
            self.velocity = 2000
        else:
            self.velocity += 200
        self.gas -= 100
        
# 비행기 ap2를 만들어서 최대 시속 over로 fly를 호출(5번 이상) 해서 
# 900이상 올라가지 않음을 확인해주세요
# 초음속비행기 sa1을 만들어서 최대시속 over로 fly를 호출(11번 이상)해서 2000이상 
# 올라가지 않음을 확인해주세요

ap2 = Airplane(0, 5000, "22")

for i in range(11):
    ap2.fly()
    print(ap2.velocity, ap2.gas, ap2.flight_number)

sa1 = SupersonicAirplane(0,5000,"33")

for i in range(11):
    sa1.fly()
    print(sa1.velocity, sa1.gas, sa1.flight_number)

profile
파이썬초짜의 기록

0개의 댓글