프로그래밍/Python

[Python] Class Inheritance (상속)

eunki 2021. 8. 16. 22:47
728x90

Class Inheritance (상속)

- 기존에 정의해둔 클래스의 기능을 그대로 물려받을 수 있다.

- 기존 클래스에 기능을 추가하거나 변경하여 새로운 클래스를 정의한다.

- 상속 받고자 하는 대상인 기존 클래스는 Parent, Super, Base class 라고 부른다.

- 상속 받는 새로운 클래스는 Child, Sub, Derived class 라고 부른다.

- 의미적으로 is-a 관계를 갖는다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def eat(self, food):
        print('{}은 {}를 먹습니다'.format(self.name, food))
    
    def sleep(self, minute):
        print('{}은 {}분동안 잡니다'.format(self.name, minute))
    
    def work(self, minute):
        print('{}은 {}분동안 일합니다'.format(self.name, minute))

class Employee(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age

bob = Employee('Bob', 25)
bob.eat('BBQ')  # Bob은 BBQ를 먹습니다
bob.sleep(30)  # Bob은 30분동안 잡니다
bob.work(60)  # Bob은 60분동안 일합니다

 

 

 

method override

- 부모 클래스의 method를 재정의(override)한다.

- 하위 클래스(자식 클래스)의 인스턴스로 호출시, 재정의된 메소드가 호출된다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def eat(self, food):
        print('{}은 {}를 먹습니다'.format(self.name, food))
    
    def sleep(self, minute):
        print('{}은 {}분동안 잡니다'.format(self.name, minute))
    
    def work(self, minute):
        print('{}은 {}분동안 일합니다'.format(self.name, minute))

class Student(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def work(self, minute):
        print('{}은 {}분동안 공부합니다'.format(self.name, minute))

class Employee(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def work(self, minute):
        print('{}은 {}분동안 업무를 합니다'.format(self.name, minute))

bob = Student('Bob', 25)
bob.eat('BBQ')  # Bob은 BBQ를 먹습니다
bob.sleep(30)  # Bob은 30분동안 잡니다
bob.work(60)  # Bob은 60분동안 공부합니다

aaron = Employee('Aaron', 25)
aaron.eat('BBQ')  # Aaron은 BBQ를 먹습니다
aaron.sleep(30)  # Aaron은 30분동안 잡니다
aaron.work(60)  # Aaron은 60분동안 업무를 합니다

 

 

 

super

하위클래스(자식 클래스)에서 부모 클래스의 method를 호출할 때 사용한다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def work(self, minute):
        print('{}은 {}분동안 준비를 합니다'.format(self.name, minute))

class Student(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def work(self, minute):
        super().work(minute)
        print('{}은 {}분동안 공부합니다'.format(self.name, minute))

class Employee(Person):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def work(self, minute):
        super().work(minute)
        print('{}은 {}분동안 업무를 합니다'.format(self.name, minute))
        
bob = Student('Bob', 25)
bob.work(60)  # Bob은 60분동안 준비를 합니다
              # Bob은 60분동안 공부합니다

aaron = Employee('Aaron', 25)
aaron.work(60)  # Aaron은 60분동안 준비를 합니다
                # Aaron은 60분동안 업무를 합니다
728x90