본문 바로가기

파이썬/3. 객체지향 프로그래밍

파이썬 클래스 상속, 합성과 통합

상속(Inheritance)(IS-A)

  • 자식 클래스(sub class)가 부모 클래스의 내용(속성과 메소드)를 물려받는 것.
class Parrent: # super class
    name = "이름"
    age = "나이"
    language = "언어"
    
    def show(self):
    	print("부모 클래스")
    
 
class child(Parrent): # sub class
	
    def __init__(self, name, age, code):
    	self.name = name
        self.age = age
        self.code = code
        
    def show_name(self):
    	print("이름 : ", self.name)
        

a = child('이정개', '23', '파이썬')

a.show()
# "부모 클래스"
a.show_name()
# "이름 : 이정개"
a.age
# "23"
a.language
# "파이썬"

 

 

  • 파이썬은 C#, JAVA와 달리 다중상속이 가능
class Parent1: # 부모 클래스 1
    pass
   
class Parent2: # 부모 클래스 2
    pass
    

class Child(Parent1, Parent2):   # 자식 클래스
    pass

 

합성(Composition)(HAS-A)

  • 물려받는 상속과 다르게 클래스를 소유하는 개념
  • 합성 주체 클래스가 클래스들을 소유하고 있는 모양새(같은 생명주기)
class CPU:
    pass
    
class RAM:
    pass
    
class Computer:           # Computer가 실행될때 CPU와 RAM도 실행된다.
    def __init__(self):
        self.cpu = CPU()
        self.ram = RAM()

통합(Aggregation)(HAS-A)

  • 합성과 비슷하나 조건부 소유
  • 같은 생명주기를 갖지 않음(약한 관계)
class Gun:
    def __init__(self, kind):
        self.kind = kind

    def bang(self):
        print('bang bang!')

class Police:
    def __init__(self):
        self.gun = None          

    def acquire_gun(self, gun):       # 총을 얻는다면 Gun 클래스를 호출
        self.gun = gun

    def release_gun(self):            # 총을 반납한다면 Gun 클래스 반환
        gun = self.gun
        self.gun = None
        return gun

    def shoot(self):
        if self.gun:                  # 총이 있다면 Gun 클래스를 호출
            self.gun.bang()
        else:
            print("Unable to shoot")