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)
파이썬 곱하기 핵심 정보 바로가기