우선 강의 설명에서 print(young.age) 가 실행 될 때는 @property 로 되어있는 getter 메소드가 자동 실행된다고 설명을 했고 young.age = 20 에서는 setter 메소드가 자동 실행된다고 하였습니다. 그러면 나이를 리턴한다는 메시지가 먼저 나올 거라고 생각했습니다. 그 이전에 "나이를 설정합니다." 라는 출력메시지가 young = Citizen(...) 의 결과로 나오는 메시지 인줄 몰랐습니다. 답변 감사합니다.
+0
2020년 2월 29일
그럼 정리하자면 young = Citizen("young", 25, "12345678) 의 결과 이닛 메소드가 실행되고 이닛 메소드 안의 self.age 는 setter 를 실행하라는 의미가 되는 것인가요? 그러면 이닛 메소드 안의 self.age = age 를 어떻게 해석해야 하나요? = 를 기준으로 왼쪽은 setter 실행-->그 결과 "나이를 설정합니다" 출력후 self._age = value 가 되고(그런데 추가로 여기서 value 는 Citizen("young", 25, "12345678) 에서 25를 받아오는 것인가요?) 그럼 일단 이닛 메소드의 self.age = age 에서 self.age 는 setter 의 기능으로 처리 되었는데 = 을 기준으로 오른쪽에 있는 age 는 어떻게 되는 건가요?
+0
2020년 2월 29일
마지막으로 출력값이 어떻게 생성되었는지 다시 한 번 정리해보면 young = Citizen("young", 25, "12345678") 의 결과 init 메소드 실행-->그 결과 그 안의 self.age 는 데코레이터에 의해 의미가 바뀌어서 setter 를 실행하게 하고 그 결과로 "나이를 설정합니다" 라는 메시지 출력후 self._age = 25 가 됩니다. 그리고 print(young.age) 는 우선 print 안의 young.age 구문이 property 데코레이터에 의해 그 의미가 age 함수를 실행하라는 의미로 바뀌었고 그래서 그 실행 결과 "나이를 리턴합니다." 메시지 출력후 리턴값으로 self._age 를 받으므로 print(self._age) 가 되어서 print(25) 가 되어 25 가 출력값이 되는 것인가요? 그리고 마지막으로 이름이 같은데 setter 메소드이냐 getter 메소드이냐는 = 을 기준으로 왼쪽이냐 오른쪽이냐 이거나 제가 생각해보니 이게 말로 설명하기는 힘든데 당연히 상황에 따라 당연히 getter 메소드이냐 setter 메소드이냐가 정해지는 것 같기는 한데 맞나요?
댓글 1개