-
3월 22일 TIL- 클래스 객체 생성 및 __init__매소드TIL(Today I Learned) 2023. 3. 22. 21:33
Q : 밑의 클래스를 정의했다고 가정하고 이 클래스를 통하여 객체를 생성하고, 너비와 높이를 5와 10으로 설정, 넓이와 둘레를 출력하는 코드를 작성해보세요
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def around(self): return 2 * (self.width + self.height)
먼저 객체 생성을 해보기 시작했다. 하지만 여기서 이런식으로 제대로 객체를 생성하기 전에 매소드를 호출하려고 하니 제대로 작동하지 않았다.
r1 = __init__()
매소드가 사용되지 않은 이유는 이 매소드를 찾을 수 없었다고 한다. 그럴 수 밖에 없었다. r1은 클래스의 객체가 아니었으니까. 그럼 이제 제대로 r1을 객체로 만들어주자.
r1 = Rectangle()
그 후 너비와 높이의 매개변수에 5와 10을 대입해 주었다.
r1 = Rectangle() r1.__init__(5, 10)
그런데 실행이 안된다 왜일까? 에러문구를 읽어보니, TypeError: __init__() missing 2 required positional arguments: 'width' and 'height'
이라고 뜬다. 너비와 높이값을 지정 해줘야하는 걸까?
r1 = Rectangle() r1.__init__(width=5, height=10)
여전히 같은 문구가 뜬다. 왜일까... 원하는 대로 숫자를 줬는데 왜 안되는걸까,, 뭘까..
마음을 다 잡고 어디가 비었을까 생각해보면서 다시 코드를 작성해보았다.
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def around(self): return 2 * (self.width + self.height) r1 = Rectangle()
그러던중 Rectangle에 커서를 올리니 설명이 등장했다. (class)Rectangle(width: int, height: int)!!!!!!!! 여기에 들어갔어야 할 인수를 엉뚱한데다 넣고 있었던 것이었다. 그러니 비었다고, 없다고 오류가 났을 수 밖에... 그 다음은 아주 편안하게 코드를 작성했다.
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def around(self): return 2 * (self.width + self.height) r1 = Rectangle(5, 10) print(r1.area()) #50 print(r1.around()) #30
금방 넓이와 둘레를 간단하게 구할 수 있었다. 이 간단한 걸 그렇게 오랫동안 붙잡고 있었다니, 슬프다. class에 __init__메소드를 사용할 경우 인스턴스 생성 시 해당 메소드가 실행된다는 사실을 이 문제를 통해 알게 되었다. 그러니 class에 바로 인수를 넣었던 것이다. 오늘부터 __init__은 절대 잊지 못할 것 같다. 다음부터는 헷갈리는 일 없이 오류도 잘 보고 설명도 잘 읽어봐야겠다!
'TIL(Today I Learned)' 카테고리의 다른 글
3월 24일 TIL - if문 or (0) 2023.03.24 3월 23일 TIL -try, except문 (0) 2023.03.23 3월 21일 TIL - 리스트의 요소들을 하나씩 비교하기 (0) 2023.03.21 3월 20일 TIL - 왜 파이썬인가? (0) 2023.03.20 3월 17일 TIL (0) 2023.03.17