PYTHON 프로그래밍

본문 바로가기
사이트 내 전체검색


PYTHON 프로그래밍
PYTHON 프로그래밍

3. 생성자 (Constructor)

페이지 정보

작성자 관리자 댓글 0건 조회 3,103회 작성일 20-07-17 19:07

본문

3. 생성자 (Constructor)

FourCal 클래스를 다음과 같이 사용해 보자.


>>> a = FourCal()

>>> a.add()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "<stdin>", line 6, in add

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__ 메서드는 setdata 메서드와 이름만 다르고 모든 게 동일하다. 

단 메서드 이름을 __init__으로 했기 때문에 생성자로 인식되어 객체가 생성되는 시점에 자동으로 호출되는 차이가 있다. 


이제 다음처럼 예제를 수행해 보자.

>>> a = FourCal()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: __init__() missing 2 required positional arguments: 'first' and 'second'



a = FourCal()을 수행할 때 생성자 __init__이 호출되어 위와 같은 오류가 발생했다. 

오류가 발생한 이유는 생성자의 매개변수 first와 second에 해당하는 값이 전달되지 않았기 때문이다.


위 오류를 해결하려면 다음처럼 first와 second에 해당되는 값을 전달하여 객체를 생성해야 한다.

>>> a = FourCal(4, 2)

>>> 


__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



이상 없이 잘 동작하는 것을 확인할 수 있다.


댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.