인프런 커뮤니티 질문&답변

레몬 녹차 (탈퇴)님의 프로필 이미지
레몬 녹차 (탈퇴)

작성한 질문수

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

퀴즈 #8

for문에서 house.show_detail()을 넣어주는 이유를 모르겠습니다.

해결된 질문

작성

·

212

0

안녕하세요, 선생님

질문이 있습니다.

 for house in houses: 까지는 리스트에 house들을 명시하는 것이라고 생각해서 이해가 되는데

house.show_detail()을 넣어주는 이유를 모르겠습니다.

 class House:

  def __init__(selflocationhouse_typedeal_typepricecompletion_year):
    self.location=location
    self.house_type=house_type
    self.deal_type=deal_type
    self.price=price
    self.completion_year=completion_year

    def show_detail(self):
      print(self.location, self.house_type, self.deal_type, self.price, self_completion)

houses=[]      
house1=House("강남""아파트""매매""10억""2010년")      
house2=House("마포""오피스텔""전세""5억""2007년")  
house3=House("송파""빌라""월세""500/50""2000년"

houses.append(house1)
houses.append(house3) 
houses.append(house3)

print("총 {0} 대의 매울이 있습니다.".format(len(houses))) 
for house in houses:
  house.show_detail() #[?] 왜 필요한지 모르겠다

답변 2

0

지금 houses라는 리스트에 들어있는 것은 ["강남", "아파트", ...., "2010년"]이라는 값이 아니라, House라는 클래스의 인스턴스입니다.

그래서 houses[0] (#houses라는 리스트의 첫 원소)는 house1(생성할 때 강남에 있는 아파트를 값으로 준 상태)가 됩니다.

그렇기 때문에 house1을 바로 print로 요청하면 값을 보여주는 것이 아니라 house1이라는 인스턴스를 호출하게 되어 예상하지 못한 결과가 나오게 됩니다.

*house.show_detail()대신 print(house)로 수정해서 실행해보시면 됩니다.

따라서 우리가 원하는 것처럼 화면에 매물 정보를 표시해주기 위해서는 이 인스턴스의 값을 읽어서 화면에 뿌려주는 작업을 거쳐야 되고,

값을 읽어서 화면에 뿌려주기 위한 방법(메소드)을 미리 House클래스에 show_detail()로 만들어뒀기 때문에 show_detail()이라는 함수를 호출해서 화면에 값을 나타내주는 겁니다.

* for house in houses: 는 리스트에 있는 house를 하나씩 꺼내보는 반복문이라고 생각하시면 됩니다. for 밑에 무엇을 할지 함수나 메서드를 호출하지 않으면 그냥 house를 꺼내보기만 하고 아무 동작도 하지 않는 거라고 생각하시면 돼요.

0

game_start() 같이 함수 부르는 것 같음...

레몬 녹차 (탈퇴)님의 프로필 이미지
레몬 녹차 (탈퇴)

작성한 질문수

질문하기