Python의 과부하 연산자

Fariba Laiq 2023년6월21일
  1. Python의 오버로드 연산자
  2. Python에서 + 연산자 오버로드
  3. Python에서 > 연산자 오버로드
  4. Python에서 == 연산자 오버로드
Python의 과부하 연산자

연산자 오버로딩은 다양한 상황에서 연산자가 동작하는 방식을 변경하는 것을 의미합니다. 일종의 다형성입니다.

연산자 오버로딩을 사용하면 연산자에 의미나 기능을 추가하여 둘 이상의 작업을 수행할 수 있습니다.

예를 들어 + 연산자는 정수 피연산자를 사용하여 더하기를 수행합니다. 그러나 문자열 피연산자와 함께 사용하면 + 연산자가 오버로드되기 때문에 연결을 수행합니다.

Python의 오버로드 연산자

Python은 Magic 메서드를 통해 사용자 정의 데이터 유형으로 연산자를 오버로드하는 방법을 제공합니다. 이들은 연관된 연산자를 사용할 때 자동으로 호출되는 특수 메소드입니다.

이중 밑줄로 시작하고 끝나기 때문에 Dunder 방법이라고도 합니다.

예를 들어 + 연산자를 작성하면 매직 메서드 __add__()가 백엔드에서 자동으로 호출됩니다. 따라서 특정 연산자로 연산자 오버로딩을 수행하려면 해당 매직 메서드의 코드만 변경하면 됩니다.

Python에서 + 연산자 오버로드

다음 코드에는 + 연산자를 오버로드하기 위해 매직 메서드 __add__()를 구현한 사용자 정의 클래스가 있습니다.

int1 + int2라고 쓸 때 실제로 백엔드에서 매직 메서드 __add()__int1.__add__(int2)로 호출됩니다. 문자열에도 동일한 작업이 적용됩니다.

str1 + str2라고 쓸 때 내부적으로 매직 메서드는 str1.__add__(str2)로 호출됩니다.

예제 코드:

# Python 3.x
class MyAddion:
    def __init__(self, a):
        self.a = a

    def __add__(self, b):
        return self.a + b.a


int1 = MyAddion(2)
int2 = MyAddion(2)
str1 = MyAddion("Delft")
str2 = MyAddion("Stack")
print(int1 + int2)
print(str1 + str2)

출력:

#Python 3.x
4
DelftStack

Python에서 > 연산자 오버로드

여기에서는 MyComp 클래스의 > 연산자를 오버로드했습니다. > 연산자를 작성하면 매직 메서드 __gt__()가 내부적으로 호출됩니다.

따라서 int1 > int2라고 작성할 때 매직 메서드 __gt__()int1.__gt__(int2)로 호출됩니다. 이 메서드는 조건이 참이면 을 반환합니다. 그렇지 않으면 false를 반환합니다.

예제 코드:

# Python 3.x
class MyComp:
    def __init__(self, a):
        self.a = a

    def __gt__(self, b):
        if self.a > b.a:
            return True
        else:
            return False


int1 = MyComp(5)
int2 = MyComp(3)
if int1 > int2:
    print(int1.a, "is greater than", int2.a)
else:
    print(int2.a, "is greater than", int1.a)

출력:

#Python 3.x
5 is greater than 3

Python에서 == 연산자 오버로드

여기에서 MyEquality 클래스에 등호 연산자 ==를 오버로드했습니다. int1 == int2라고 쓰면 내부적으로 매직 메서드 __eq__()int1.__eq__(int2)로 호출됩니다.

두 피연산자가 같으면 Equal을 반환합니다. 그렇지 않으면 같지 않음을 반환합니다.

예제 코드:

# Python 3.x
class MyEquality:
    def __init__(self, a):
        self.a = a

    def __eq__(self, b):
        if self.a == b.a:
            return "Equal"
        else:
            return "Not equal"


int1 = MyEquality(3)
int2 = MyEquality(3)
print(int1 == int2)

출력:

#Python 3.x
Equal

연산자 오버로딩의 경우 연산자의 피연산자 수를 변경할 수 없다는 점은 주목할 가치가 있습니다. 단항 연산자를 이진 연산자로 오버로드할 수 없으며 그 반대도 마찬가지입니다.

예를 들어 ~ 반전 연산자(단항 연산자)를 이항 연산자로 오버로드할 수 없습니다.

작가: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

관련 문장 - Python Operator