# 상속 관계
- Student 클래스는 Person 클래스를 상속받아서 만들었다.
class Person :
def greeting(self) :
print("안녕하세요")
class Student(Person) :
def study(self) :
print("공부하기")
여기서 학생 Student 는 사람 Person 이므로 같은 종류입니다. 이처럼 상속은 명확하게 같은 종류이며 동등한 관계일 때 사용합니다. 즉, "학생은 사람이다." 라고 했을 때 말이 되면 동등한 관계입니다. 그래서 상속 관계를 영어로 is-a 관계라고 부릅니다. (Student is a Person)
# 포함관계
학생 클래스가 아니라 사람 목록을 관리하는 클래스를 만든다면 ?
리스트 속성에 Person 인스턴스를 넣어서 관리하면 된다.
class Person :
def greeting(self) :
print("안녕하세요")
class PersonList :
def __init__(self) :
self.person_list = [] # 리스트 속성에 Person 인스턴스를 넣어서 관리
def append_person(self, person) : # 리스트 속성에 Person 인스턴스를 추가하는 함수
self.person_list.append(person)
sara = Person()
person_list = PersonList()
person_list.append_person(sara)
print(person_list.person_list)
>>> [sara]
상속을 사용하지 않고 속성에 인스턴스를 넣어서 관리하므로 PersonList 가 Person 을 포함하고 있다. 이러면 사람 목록 PersonList 와 사람 Person 은 동등한 관계가 아니라 포함 관계입니다. 즉, "사람 목록은 사람을 가지고 있다." 라고 말할 수 있습니다. 그래서 포함 관계를 영어로 has-a 관계라고 부른다. (PersonList has a Person)
정리하자면, 같은 종류에 동등한 관계일 때는 상속을 사용하고, 그 이외에는 속성에 인스턴스를 넣는 방식을 사용하면 된다.
반응형
'Programming > Python' 카테고리의 다른 글
[클래스] 메서드 오버라이딩 사용하기 (0) | 2023.03.13 |
---|---|
[클래스] 기반 클래스의 속성 사용하기 (1) | 2023.03.13 |
[클래스] 상속 사용하기 (0) | 2023.03.13 |
[클래스] 클래스 메서드 사용하기 (0) | 2023.03.13 |
[클래스] 정적메서드 사용하기 (0) | 2023.03.13 |