오퍼레이터 오버로딩은 사전 정의된 작동 의미를 넘어 확장된 의미를 부여하는 것을 의미합니다. 예를 들어 연산자 +는 두 개의 정수를 추가하고 두 개의 문자열을 결합하고 두 개의 목록을 병합하는 데 사용됩니다. '+'연산자가 int 클래스와 str 클래스에 의해 오버로드되기 때문에 달성 가능합니다. 동일한 기본 제공 연산자 또는 함수가 다른 클래스의 개체에 대해 다른 동작을 표시한다는 것을 알았을 수도 있습니다. 이를 연산자 오버로딩 이라고 합니다. 

print(1 + 2)
 
print("파이썬"+"시작하기") 
  
print(3 * 4)
  
print("파이썬"*4)

 

산출
3
파이썬시작하기
12
파이썬파이썬파이썬파이썬

Python에서 연산자를 오버로드하는 방법은 무엇입니까?  
클래스의 물리적 표현(사용자 정의 데이터 유형)인 두 개의 객체가 있고 이진 '+' 연산자를 사용하여 두 개의 객체를 추가해야 한다고 생각하면 컴파일러가 두 개의 객체를 추가하는 방법을 모르기 때문에 오류가 발생합니다. . 그래서 우리는 연산자에 대한 메서드를 정의하고 그 프로세스를 연산자 오버로딩이라고 합니다. 모든 기존 연산자를 오버로드할 수 있지만 새 연산자를 만들 수는 없습니다. 연산자 오버로딩을 수행하기 위해 Python은 특정 연산자와 연결될 때 자동으로 호출되는 특수 함수 또는 마술 함수를 제공합니다. 예를 들어 + 연산자를 사용하면 + 연산자에 대한 연산이 정의된 매직 메서드 __add__가 자동으로 호출됩니다.


Python에서 바이너리 + 연산자 오버로딩: 
사용자 정의 데이터 유형에 대해 연산자를 사용하면 해당 연산자와 관련된 특수 함수 또는 매직 함수가 자동으로 호출됩니다. 연산자의 동작을 변경하는 것은 메서드나 함수의 동작을 변경하는 것만큼 간단합니다. 클래스에서 메서드를 정의하고 연산자는 메서드에 정의된 동작에 따라 작동합니다. + 연산자를 사용하면 + 연산자에 대한 연산이 정의된 매직 메서드 __add__가 자동으로 호출됩니다. 여기에서 이 매직 메서드의 코드를 변경하여 + 연산자에 추가 의미를 부여할 수 있습니다. 


코드 1: 

 
class A:
    def __init__(self, a):
        self.a = a
  
    def __add__(self, o):
        return self.a + o.a 
ob1 = A(1)
ob2 = A(2)
ob3 = A("파이썬")
ob4 = A("시작하기")
  
print(ob1 + ob2)
print(ob3 + ob4)
산출
3
파이썬시작하기


 

코드 2: 

class complex:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def __add__(self, other):
        return self.a + other.a, self.b + other.b
  
Ob1 = complex(1, 2)
Ob2 = complex(2, 3)
Ob3 = Ob1 + Ob2
print(Ob3)
 
결과
(3, 5)

 

Python에서 비교 연산자 오버로딩: 

class A:
    def __init__(self, a):
        self.a = a
    def __gt__(self, other):
        if(self.a>other.a):
            return True
        else:
            return False
ob1 = A(2)
ob2 = A(3)
if(ob1>ob2):
    print("ob1 은 ob2 보다 크다")
else:
    print("ob2 은 ob1 보다 크다")

출력: 
 

ob2은 ob1보다 크다

같음 및 미만 연산자 오버로딩: 

class A:
    def __init__(self, a):
        self.a = a
    def __lt__(self, other):
        if(self.a<other.a):
            return "ob1은 ob2보다 작습니다."
        else:
            return "ob2는 ob1보다 작습니다."
    def __eq__(self, other):
        if(self.a == other.a):
            return "같다"
        else:
            return "같지 않음"
                  
ob1 = A(2)
ob2 = A(3)
print(ob1 < ob2)
  
ob3 = A(4)
ob4 = A(4)
print(ob1 == ob2)
 

출력: 
 

ob1은 ob2보다 작습니다.
같지 않음
 

 

'파이썬' 카테고리의 다른 글

Python의 연산자 함수 예제1  (0) 2022.08.04
파이썬 any와 all  (0) 2022.08.04
파이썬의 나눗셈 연산자  (0) 2022.08.04
파이썬 삼항 연산자  (0) 2022.08.04
파이썬에서 사용자로부터 여러 입력 받기  (0) 2022.08.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기