TIL — 객체 지향 프로그래밍 (4)

이성보·2020년 11월 2일
0

python

목록 보기
7/7
post-thumbnail

참고 자료
https://www.py4e.com/lessons/servces
찰스 세브란스. 『데이터를 다루며 배우는 파이썬』. 인사이트, 2019.

상속

객체 지향 프로그래밍의 또 다른 강력한 기능은 현재 클래스를 확장해서 새로운 클래스를 만들 수 있다는 점입니다. 클래스를 확장할 때는 '부모 클래스'인 원본 클래스를 호출해서 '자식 클래스'인 새로운 클래스를 생성합니다.

이번 예제에서는 PartyAnimal 클래스 정의를 별도의 소스 파일로 옮깁니다.

class PartyAnimal:
   x = 0
   name = ''
   def __init__(self, nam):
     self.name = nam
     print(self.name,'constructed')

   def party(self) :
     self.x = self.x + 1
     print(self.name,'party count',self.x)
 
# Code: https://www.py4e.com/code3/party.py

다음으로, 다른 파일에서 PartyAnimal 클래스를 가져와서(import), 아래처럼 확장합니다.

from party import PartyAnimal

class CricketFan(PartyAnimal):
   points = 0
   def six(self):
      self.points = self.points + 6
      self.party()
      print(self.name,"points",self.points)

s = PartyAnimal("Sally")
s.party()
j = CricketFan("Jim")
j.party()
j.six()
print(dir(j))

# Code: https://www.py4e.com/code3/party6.py

CricketFan 객체를 정의할 때, PartyAnimal 클래스를 확장하고 있다는걸 나타냅니다. 이 말은 PartyAnimal 클래스의 모든 변수(x)와 메서드(party)가 CricketFan 클래스에 의해 상속(inherit)된다는 뜻입니다.

CricketFan 클래스 내부의 six 메서드를 보면, PartyAnimal 클래스의 party 메서드를 호출하고 있음을 볼 수 있습니다. 부모 클래스의 변수와 메서드는 자식 클래스로 병합(merge)됩니다.

Sally constructed
Sally party count 1
Jim constructed
Jim party count 1
Jim party count 2
Jim points 6
['__class__', '__delattr__', ...
 '__weakref__', 'name', 'party', 'points', 'six', 'x']

CricketFan 클래스의 인스턴스인 j에 dir을 호출하면, 부모 클래스의 속성과 메서드 외에도, CricketFan 클래스를 확장하면서 추가된 속성과 메서드가 들어있다는 걸 볼 수 있습니다.

0개의 댓글