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
연산자 오버로딩의 경우 연산자의 피연산자 수를 변경할 수 없다는 점은 주목할 가치가 있습니다. 단항 연산자를 이진 연산자로 오버로드할 수 없으며 그 반대도 마찬가지입니다.
예를 들어 ~
반전 연산자(단항 연산자)를 이항 연산자로 오버로드할 수 없습니다.
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