관리 메뉴

FU11M00N

[Python] 연산자 오버로딩 본문

Programming/Python

[Python] 연산자 오버로딩

호IT 2020. 11. 24. 16:08

직접 정의한 클래스의 객체에


• +, - * 와 같은 일반 연산자를 적용하려면 , 객체를 연산 가능한
상태로 만들어야 함
• 연산자 오버로딩을 통해 이를 구현

 연산자 오버로딩

• 인스턴스 객체끼리 서로 연산을 할 수 있게 기존에 있는 연산자의 기능을 바꾸어 중복으로 정의하는 것
 파이썬에서는 특정 이름의 메소드를 재정의하면 연산
자 중복정의 구현

 

- 매직 메소드 

 

미리 정의된 수치 연산자

매직 메소드

 

class NumBox:
    def __init__(self,num):
        self.num = num
n=NumBox(40)

print(n + 100) # n+100은  객체 + 100 임 그래서 에러
# 에러 발생  

에러발생

 

class NumBox:
    def __init__(self,num):
        self.num = num
    def __add__(self,num):
        self.num += num
    def __sub__(self,num):
        self.num -= num
n= NumBox(40)
n+100 # n+100 == n.__add__ 라는 의미
print(n.num)
n-110
print(n.num)

결괏 값 1

비교 연산자 오버로딩 메소드

비교 연산자

class Number:
    def __init__(self,n):
        self.n =n
    def __lt__(self,other):
        return self.n< other.n
    def __le__(self,other):
        return self.n <= other.n
    def __gt__(self,other):
        return self.n > other.n
    def __ge__(self,other):
        return self.n <= other.n
    def __eq__(self,other):
        return self.n == other.n
n1 = Number(3)
n2 = Number(4)

print("n1 <n2 : {} ".format(n1<n2))
print("n1 <= n2 : {}".format(n1<=n2))
print("n1 > n2 : {}".format(n1>n2))
print("n1 <= n2 : {}".format(n1>=n2))
print("n1 == n2 : {}".format(n1==n2))

결괏 값 2

 

Comments