44. 파이썬 – 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)

  • 네이버 블로그 공유하기
  • 카카오톡 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기

지난 시간까지 파이썬 에서 사칙연산 클래스를 만드는 과정중에 더하기 기능까지 만드는 과정에 대해 공부해봤습니다.
이번 포스팅에서는 사칙연산에서 나머지 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)에 대해서 공부해 보려 합니다.

파이썬 클래스

사칙연산 클래스 만들어 보기 #5

곱하기.빼기.나누기 기능 만들기

곱하기.빼기.나누기 기능을 추가하여 보겠습니다.

Python
>>> class Four_Calculator:
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...     def multi(self):
...         result = self.first * self.second
...         return result
...     def subtrack(self):
...         result = self.first - self.second
...         return result
...     def divide(self):
...         result = self.first / self.second
...         return result
...
>>>        

이렇게 add (더하기 기능) 에 이어 multi(곱하기), subtrack(빼기), divide(나누기) 를 add 메서드에서 공부한 것 처럼 동일하게 만들어 봤습니다.
이제 정상적인 동작을 하는지 작동을 해보겠습니다.

Python
>>> a = Four_Calculator()
>>> b = Four_Calculator()
>>> a.testnumber(4, 2)
>>> b.testnumber(3, 8)
>>> a.add()
6
>>> a.subtrack()
2
>>> a.divide()
2.0
>>> b.add()
11
>>> b.multi()
24
>>> b.subtrack()
-5
>>> b.divide()
0.375
>>>

이렇게 파이썬 클래스를 이용해 사칙연산 기능(더하기.곱하기.빼기.나누기 기능)을 하는 클래스를 만들어 보았습니다.

생성자(Constructor)

앞서 만든 Four_Calculator 클래스를 아래처럼 사용해 보겠습니다.

Python
>>> a = Four_Calculator()
>>> a.add()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in add
AttributeError: 'Four_Calculator' object has no attribute 'first'
>>>

Four_Calculator 클래스의 인스턴스 a 에 testnumber 메서드를 수행하지 않고 add 메서드를 먼저 수행해 봤습니다.
그 결과는 AttributeError: ‘Four_Calculator’ object has no attribute ‘first’ 라는 오류가 발생하게 됩니다.
그 이유는 testnumber 메서드를 수행을 해야만 a 의 객체변수 first 와 second 가 생성되기 때문입니다.

이렇듯 first, second 같은 초기값을 객체에 설정을 해야하는 경우에는 testnumber 와 같은 메서드를 호출하여 초기값을 설정을 하기 보다는 생성자를 구현하는 것이 좋은 방법입니다.

여기서 생성자(Constructor) 라는 것은 객체가 생성될 때 자동으로 호출되는 메서드를 뜻합니다.

파이썬 메서드 이름으로 __init__ 를 사용하게 되면 이 메서드는 생성자가 됩니다.
아래처럼 Four_Calculator 클래스에 생성자를 추가해 보겠습니다.

__init__ 메서드의 init 앞뒤로 붙은 __ 는 언더바(_) 두 개 를 이어서 쓴 것 입니다.

Python
>>> class Four_Calculator:
...     def __init__(self, first, second):
...         self.first = first
...         self.second = second
...     def testnumber(self, first, second):
...         self.first = first
...         self.second = second
...     def add(self):
...         result = self.first + self.second
...         return result
...     def multi(self):
...         result = self.first * self.second
...         return result
...     def subtrack(self):
...         result = self.first - self.second
...         return result
...     def divide(self):
...         result = self.first / self.second
...         return result
...
>>>

기존 클래스에 새롭게 추가한 __init__ 메서드만 따로 살펴 보겠습니다.

Python
def __init__(self, first, second):
    self.first = first
    self.second = second

__init__ 메서드는 testnumber 메서드와 이름만 다르고 똑같습니다.
메서드 이름만을 __init__ 으로 지정했기 때문에 생성자로 인식이 되며
객체가 생성되는 시점에 자동으로 호출이 된다는 차이점이 있습니다.

다음 코드를 실행해 보겠습니다.

Python
>>> a = Four_Calculator()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Four_Calculator.__init__() missing 2 required positional arguments: 'first' and 'second'

위처럼 a = Four_Calculator() 를 수행을 하면 생성자 __init__ 이 호출이 되어 위 같은 오류가 발생하게 됩니다.
이렇게 오류가 나는 이유는 생성자의 배개변수 first 와 second 에 값이 전달되지 않았기 때문입니다.
위의 오류를 해결하는 방법은 first 와 second 에 해당하는 값을 전달하면서 객체를 생성하면 됩니다.

Python
>>> a = Four_Calculator(4, 2)

위처럼 수행을 하게 되면 __init__ 메서드의 매개변수에 self 는 생성되는 객체, first = 4, second = 2 의 값이 전달되게 됩니다.

여기서 __init__ 메서드에도 다른 메서드와 마찬가지로 self 에는 첫 번재 매개변수로 생성되는 객체가 자동으로 전달이 되게 됩니다.

결과적으로 __init__ 메서드를 호출하게 되면 이전에 testnumber 메서드를 호출했을 때와 동일하게 first 와 second 라는 객체 변수가 생성이 되게 됩니다.
아래처럼 확인해 보겠습니다.

Python
>>> a = Four_Calculator(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2
>>>

아래처럼 사칙연산 클래스로 만들었던 add, multi, divide, subtrack 의 메서드도 정상적으로 잘 동작하는 것을 확인할 수 있습니다.

Python
>>> a.add()
6
>>> a.multi()
8
>>> a.divide()
2.0
>>> a.subtrack()
2
>>>

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

44. 파이썬 - 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)

Leave a Comment