Python

[Python] 클래스 : 상속(Inheritance)

2022. 8. 29. 00:58

상속(Inheritance)


 

객체 지향 프로그래밍(OOP)에서 상속(Inheritance)은 
객체들 간의 관계를 구축하는 방법

 

일반적인 클래스 형태 다른 클래스에서 '상속받은' 클래스 형태
class BaseClassName:
    기반 클래스의 변수, 함수(메서드) 등의 코드
    …
    기반 클래스의 변수, 함수(메서드) 등의 코드
class DerivedClassName(BaseClassName):
    파생 클래스의 변수, 함수(메서드) 등의 코드
    …
    파생 클래스의 변수, 함수(메서드) 등의 코드

 


연습 1

모 클래스

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def print_info(self):
        class_name = self.__class__.__name__
        print(f"[{class_name}] name: {self.name}, age:{self.age}")

 

상속 클래스

class Student(Person):
    def study(self):
        print('공부를 합니다.')
        
class Programmer(Person):
    def programming(self):
        print('프로그래밍을 합니다.')
        
class Doctor(Person):
    def treatment(self):
        print('치료를 합니다.')

student = Student('Sooin', 21)
student.print_info()
student.Study()

developer = Programmer('Jonghyuck', 29)
developer.print_info()
developer.programming()

doc = Doctor('kimsaboo',49)
doc.print_info()
doc.treatment()


연습 2

'클래스 변수'  와 '인스턴스 변수' 의 차이

class Dog:
    kind = '개과'              # 클래스 변수 : 모든 인스턴스가 공유한다.
    
    def __init__(self, name):
        self.name = name      # 인스턴스 변수 : 각 인스턴스별로 고유한 값을 가진다.
    
    def print_kind(self):
        print(self.kind)
        
    def print_name(self):
        print(self.name)

 Dog 클래스의 클래스 변수 kind 는 모든 인스턴스가 공유해서 쓸 수 있다.

 


dog1 = Dog('모카')
dog2 = Dog('밀크')

print("▶ 직접 값 출력하기")
print(dog1.kind)
print(dog2.kind)
print(dog1.name)
print(dog2.name, '\n')


print('▶ 함수를 통해 출력')
dog1.print_kind()
dog2.print_kind()
dog1.print_name()
dog2.print_name()