코딩

파이썬의 클래스 & 연산자 add [파이썬 3.7]

robin_H 2020. 9. 5. 13:38

저번 글 까지는 클래스(class)에 대해서 자세히 알아보았다. 이번에는 연산자 add가 포함된 클래스 코드를 한 번 알아보고 __init__함수에 대해서도 알아보겠다.

 

연산자 함수는 파이썬에서 많이 쓰이고 클래스와도 많이 쓰인다. 이 코드는 그중에서 add라는 연산자 함수를 넣은 코드의 예시이다.

class calculator1():
    i = 0

    def __init__(self):
        print(1)

    def add(self, a, b):
        self.i = self.i + a + b
        return self.i

모든 __xxx__ 형식의 함수는 파이썬에서 정해진 기능이 있는 함수이다. 여기에서 쓰인 __init__라는 함수는 소속된 클래스의 인스턴스가 생성되면 자동으로 실행되는 함수이다.

 

밑에 인스턴스를 이렇게 만들면 __init__가 자동으로 실행될 것이다.

x = calculator1()
y = calculator1()
calculator1.i = 2

그렇다면 이 코드를 작성하고 실행시키면 어떻게 될까?

print(x.add(int(input("더할 수 1: ")), int(input("더할 수 2: "))))
print(y.add(int(input("더할 수 1: ")), int(input("더할 수 2: "))))
print(x.i)
print(y.i)

결과는 input에 각각 1, 1, 2, 2를 적었을 때 4, 6이 나온다. 왜냐하면 위에서 클래스의 i값을 2로 바꾸었기 때문에 i와 같이 더해서 나온 2+1+1, 2+2+2가 결과값이 나온다.

 

그렇다면 이렇게 i를 따로 값을 정해주어도 input에 입력한 수들만 더하게 만들기 위해서는 어떻게 해야 할까?

class calculator2():
    i = 0

    def __init__(self):
        self.i = 0
        print(1)

    def add(self, a, b):
        self.i = self.i + a + b
        return self.i

이 코드와 위의 코드의 차이점은 i를 __init__함수에 저장해 놓았다는 것이다. 이렇게 하면 인스턴스가 만들어지면서 __init__내의 코드가 실행되면서 i가 자동으로 0으로 고정이 된다.

print(a.add(int(input("더할 수 1: ")), int(input("더할 수 2: "))))
print(b.add(int(input("더할 수 1: ")), int(input("더할 수 2: "))))
print(a.i)
print(b.i)

이 상태로 실행을 하면 1, 1, 2, 2를 입력할 경우 0+1+1, 0+2+2, 즉, 2, 4가 결과 값이 나오므로 입력한 수들만 더해서 나온다.

 

이런식으로 __init__와 연산자 함수를 클래스와 같이 잘 활용해 계산기 같은 연산 코드를 만들 수 있다.