일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 마케팅
- 파이썬문자열
- 구글애널리틱스공부
- 메이크샵
- 유튜브
- 파이썬내장함수
- 페이스북광고
- 파킹통장
- 구글애널리틱스
- 구글애널리틱스강의
- GA가이드
- GA4
- 파이썬
- 책추천
- 국민내일배움카드
- 신용카드추천
- 파이썬정규표현식
- 카페24
- 파이썬함수
- 구글애널리틱스4
- GA
- 파킹통장추천
- GA강의
- 유튜브광고
- 파이썬프로그래밍
- 구글애널리틱스가이드
- 구글ads
- 파이썬공부
- GA공부
- GA설치
- Today
- Total
정리왕
파이썬 클래스 3 (생성자 Constructor) 본문
생성자 Constructor
이번에는 우리가 만든 FourCal 클래스를 다음과 같이 사용해 보자.
>>> a = FourCal()
>>> a.add()
Traceback (most recent call last):
File "<pyshell#73>", line 1, in <module>
a.add()
File "<pyshell#59>", line 6, in add
result = self.first + self.second
AttributeError: 'FourCal' object has no attribute 'first'
FourCal 클래스의 인스턴스 a에 setdata 메서드를 수행하지 않고 add 메서드를 수행하면 'AttributeError:'FourCal' object has no attribute 'first' 오류가 발생한다. setdata 메서드를 수행해야 객체 a의 객체변수 first와 second가 생성되기 때문이다.
이렇게 객체에 초기값을 설정해야 할 필요가 있을 때는 setdata와 같은 메서드를 호출하여 초깃값을 설정하기보다는 생성자를 구현하는 것이 안전한 방법이다. 생성자(Constructor)란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다. 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 된다. 다음과 같이 FourCal 클래스에 생성자를 추가해 보자.
★ __init__ 메서드와 init앞뒤로 붙은 __는 언더스코어(_)두 개를 붙여 쓴 것이다.
>>> class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
>>>
새롭게 추가된 생성자 __init__ 메서드만 따로 떼어 내서 살펴보자.
def __init__(self, first, second):
self.first = first
self.second = second
__init__ 메서드는 setdata 메서드와 이름만 다르고 모든 게 동일하다. 단 메서드 이름을 __init__으로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출되는 차이가 있다.
이제 다음처럼 예제를 수행해 보자.
>>> a = FourCal()
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
a = FourCal()
TypeError: __init__() missing 2 required positional arguments: 'first' and 'second'
a = FourCal( )을 수행할 때 생성자 __init__이 호출되어 위와 같은 오류가 발생했다. 오류가 발생한 이유는 생성자의 매개변수 first와 second에 해당하는 값이 전달되지 않았기 때문이다. 위 오류를 해결하려면 다음처럼 first와 second에 해당되는 값을 전달하여 객체를 생성해야 한다.
>>> a = FourCal(4, 2)
>>>
위와 같이 수행하면 __init__ 메서드의 매개변수에는 각각 아래쪽과 같은 값이 대입된다.
매개변수 | 값 |
self | 생성되는 객체 |
first | 4 |
second | 2 |
★ __init__ 메서드도 다른 메서드와 마찬가지로 첫 번째 매개변수 self에 생성되는 객체가 자동으로 전달된다는 점을 기억하자.
따라서 __init__ 메서드가 호출되면 setdata 메서드를 호출했을 때와 마찬가지로 first와 second라는 객체변수가 생성될 것이다.
다음과 같이 객체변수의 값을 확인해 보자.
>>> a = FourCal(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2
add나 div등의 메서드도 잘 동작하는지 확인 해 보자.
>>> a = FourCal(4,2)
>>> a.add()
6
>>> a.div()
2.0
이상 없이 잘 동작하는 것을 확인할 수 있다.
'6.개발 > 파이썬 공부하기' 카테고리의 다른 글
파이썬 모듈 1 (0) | 2020.12.01 |
---|---|
파이썬 클래스 4 (상속과 변수) (0) | 2020.11.29 |
파이썬 클래스 2 (사칙연산 만들기) (0) | 2020.11.29 |
파이썬 클래스1 (클래스란?) (0) | 2020.11.29 |
파이썬 파일 읽고 쓰기 (0) | 2020.11.29 |