지난 시간까지 파이썬 에서 사칙연산 클래스를 만드는 과정중에 더하기 기능까지 만드는 과정에 대해 공부해봤습니다.
이번 포스팅에서는 사칙연산에서 나머지 곱하기.빼기.나누기 기능 만들기와 생성자(Constructor)에 대해서 공부해 보려 합니다.
- 43. 파이썬 – 더하기 기능 만들기
- 42. 파이썬 – 메서드 수행문
- 41. 파이썬 – 클래스 구조와 매개변수
- 워드프레스에서 포토샵.플러그인 없이 포토스케이프(3.7)로 워터마크 만들기
- VMware 공유폴더 설정(VMware tools) v16.1
파이썬 클래스
사칙연산 클래스 만들어 보기 #5
곱하기.빼기.나누기 기능 만들기
곱하기.빼기.나누기 기능을 추가하여 보겠습니다.
>>> 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 메서드에서 공부한 것 처럼 동일하게 만들어 봤습니다.
이제 정상적인 동작을 하는지 작동을 해보겠습니다.
>>> 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 클래스를 아래처럼 사용해 보겠습니다.
>>> 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 앞뒤로 붙은 __ 는 언더바(_) 두 개 를 이어서 쓴 것 입니다.
>>> 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__ 메서드만 따로 살펴 보겠습니다.
def __init__(self, first, second):
self.first = first
self.second = second
__init__ 메서드는 testnumber 메서드와 이름만 다르고 똑같습니다.
메서드 이름만을 __init__ 으로 지정했기 때문에 생성자로 인식이 되며
객체가 생성되는 시점에 자동으로 호출이 된다는 차이점이 있습니다.
다음 코드를 실행해 보겠습니다.
>>> 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 에 해당하는 값을 전달하면서 객체를 생성하면 됩니다.
>>> a = Four_Calculator(4, 2)
위처럼 수행을 하게 되면 __init__ 메서드의 매개변수에 self 는 생성되는 객체, first = 4, second = 2 의 값이 전달되게 됩니다.
여기서 __init__ 메서드에도 다른 메서드와 마찬가지로 self 에는 첫 번재 매개변수로 생성되는 객체가 자동으로 전달이 되게 됩니다.
결과적으로 __init__ 메서드를 호출하게 되면 이전에 testnumber 메서드를 호출했을 때와 동일하게 first 와 second 라는 객체 변수가 생성이 되게 됩니다.
아래처럼 확인해 보겠습니다.
>>> a = Four_Calculator(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2
>>>
아래처럼 사칙연산 클래스로 만들었던 add, multi, divide, subtrack 의 메서드도 정상적으로 잘 동작하는 것을 확인할 수 있습니다.
>>> a.add()
6
>>> a.multi()
8
>>> a.divide()
2.0
>>> a.subtrack()
2
>>>
이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
