Notice
Recent Posts
Recent Comments
Code IT
Python - 상속 본문
# 객체지향 프로그래밍에서 절대 빼놓을 수 없는 것, 그리고 가장 어려운 것. 그것은 상속이다. # 사실, 상속을 이해할 때 우리가 흔히 알고있는 그 "상속"을 떠올리면 이해하기가 어렵다. # 부모가 자식에게 물려주는 것을 이해하는 것은 어렵지 않다. # 그러나 반대로 자식이 부모에게 무언가를 얻어가는 것은 이해하기가 쉽지 않다. # "상속"이란 재산권자체를 물려받는 것이기에 역순으로 이해하기가 쉽지 않다는 것이다. # 불행히도, 상속에서는 역순으로 호출해야만 하는 상황이 적지 않다. # 그래서 본 파트는 상속이 아니라 "확장"을 이해시켜주고 싶다. # 확장은 한 클래스가 본래 가지고 있던 멤버변수나 메서드에 무엇인가를 더 추가하거나 # 본래가진 것을 수정하는 것을 말한다. # 집에서 발코니 확장이나 거실/방 확장을 생각하면 편하다. # 상속은 단순하다. # 아래 특성을 가진 클래스 하나가 있다. class Unit: name = None move_speed = 5 attack_damage = 1 attack_range = 1 def move(self): print(self.name + "이(가) 이동합니다. 이동 속도 : " + str(self.move_speed)) def attack(self): print(self.name + "이(가) 공격합니다. 공격 데미지 : " + str(self.attack_damage) + " 공격 범위 : " + str(self.attack_range)) def stop(self): print(self.name + "이(가) 이동과 공격을 멈춥니다.") # 이제 Unit 클래스를 확상해 SCV를 만들어 보자. class SCV(Unit): def __init__(self): self.name = "SCV" self.move_speed = 3 self.attack_damage = 3 def attack(self): """ 메서드 재정의 하기 (Method Overriding) """ print(self.name + "가 미네랄을 채취합니다.") def stop(self): """ 메서드 재정의 하기 (Method Overriding) """ super().stop() # 부모클래스(Unit)의 stop 호출하기 print(self.name + "가 미네랄 채취를 멈춥니다.") def build(self, name): """ 메소드 확장(추가) """ print(self.name + "가 " + name + "을 짓습니다.") # SCV는 Unit을 확장했으니 move, attack, stop 같은 메소드를 더 만들필요가 없다. # 그냥 사용만 하면 된다. scv = SCV() scv.move() scv.attack() scv.stop() scv.build("Factory") print(type(scv)) print(scv.__dict__) # 인스턴스 정보 보기 print(issubclass(SCV, Unit)) # SCV가 Unit을 확장했는지 확인하기
'Python & Django' 카테고리의 다른 글
Python - Class Method, Instance Method (0) | 2019.02.03 |
---|---|
Python - self (0) | 2019.02.03 |
Python - 실습 - 게시판 만들기 (클래스) (0) | 2019.01.31 |
Python - 실습 - 게시판 만들기 (함수) (0) | 2019.01.31 |
Python - class (0) | 2019.01.31 |
Comments