매번 질문올릴때 친절히 답변해주셔서 감사합니다!! 더 열심히 공부하겠습니다!
self.person_list = []
리스트 속성에 Person 인스턴스를 넣어서 관리한다고 하셨는데
일단 Person 인스턴스를 아직 만들지 않았는데 바로 Person 인스턴스를 넣어서 관리한다는게 잘 이해를 못했습니다.ㅠㅠ
self.person_list = []
그리고 두번째는 혹시 속성을 생성할때 빈 리스트를 생성해서 리스트 속성이라고 부르신건지 궁금합니다!
그리고 세번째는 여기 스크립트 파일 예문을 보면
class PersonList()에 빈 괄호가 있는데 혹시 왜 빈 괄호를 추가하셨는지 알려주실수 있으세요??
class 선언이고,
self.person_list = []
부분은 클래스가 초기화될 때 실행되는 부분입니다. 클래스를 초기화하는 시점에는 이미 클래스가 정의되어 있으니 문제가 없겠지요.
self.person_list = []
클래스에 person_list 속성을 두고, person_list가 리스트이므로 간단히 리스트 속성이라고 했습니다.
class PersonList()
빈 괄호는 빼야 합니다.
오타인데 클래스 선언에 쓰인 ()는 파이썬이 무시하는 것 같습니다.
그래도 오타가 포함된 코드로 테스트 결과를 보여드리겠습니다. 파이썬이 클래스 선언에서 ()를 무시하는 지도 정말인지 살펴보죠.
>>> class PersonList():
def __init__(self):
self.person_list = [] # 리스트 속성에 Person 인스턴스를 넣어서 관리
def append_person(self, person): # 리스트 속성에 Person 인스턴스를 추가하는 함수
self.person_list.append(person)
>>> dir(PersonList)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append_person']
>>> dir(PersonList())
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append_person', 'person_list']
>>>
IDLE에서 실행해보면 dir(PersonList)만 했을 때는 클래스 정의만 표시하는 것을 알 수 있습니다. 클래스가 생성되었을 때, 즉 인스턴스가 생성되었을 때 생성되는 person_list가 없습니다.
dir(PersonList())를 했을 때는 끝에 보면 'person_list'가 추가된 것을 볼 수 있습니다. 즉, PersonList()는 인스턴스를 생성했기 때문에 인스턴스에는 person_list가 있습니다. 물론, 생성한 인스턴스를 변수에 저장하지 않았으니 해당 라인의 코드 실행이 끝나면 소멸됩니다.
>>> people = PersonList()
>>> dir(people)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append_person', 'person_list']
>>>
PersonList 인스턴스를 생성해서 people에 저장하고, dir(people)을 해 보면 인스턴스를 생성해서 저장했으므로 끝에 person_list가 있는 것을 알 수 있습니다.
dir은 객체 내부에 있는 메서드 목록을 보여줍니다. dir 함수는 Unit 39에서 설명합니다.