for문에서 house.show_detail()을 넣어주는 이유를 모르겠습니다.
지금 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를 꺼내보기만 하고 아무 동작도 하지 않는 거라고 생각하시면 돼요.