클래스끼리 또는 클래스에 연산을 사용하고 싶은데 클래스는 애초에 요소가 아니니 불가능하다.
아래 코드와 같이 변수에 클래스를 정의 후 더하기를 하니 타입에러가 발생 함.class Point : def __init__(self, x=0, y=0) : self.x = x self.y = y p1 = Point(1, 2) p2 = Point(3, 4) print(p1 + p2) =============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1102\test.py ============================== Traceback (most recent call last): File "C:\Users\GIEC\Desktop\기초문법\1102\test.py", line 9, in <module> print(p1 + p2) TypeError: unsupported operand type(s) for +: 'Point' and 'Point'
따라서 연산자를 클래스 내 메소드로 정의하는 것을 연산자 오버로딩이라 함.
이름을 직접 명시하여 호출하지 않더라도 상황에 따라 자동으로 호출되는 메소드이며 name 과 같은 형태.
파이썬은 overlode 를 지원하지 않기 때문에 두개의 add()를 선언해도 하나만 유효
참고
class Human :
def __init__(self, age, name) :
self.age = age
self.name = name
#equal 함수 생성 후 기호로 사용.
def __eq__(self, other) :
return self.age == other.age and self.name == other.name
kim = Human(29, '이유리')
lee = Human(29, '이유리')
moon = Human(50, '이지민')
print(kim == lee)
print(kim == moon)
class Point :
def __init__(self, x=0, y=0) :
self.x = x
self.y = y
def __add__(self, other) :
x = self.x + other.x
y = self.y + other.y
return Point(x, y)
def __str__(self) :
return 'Point(' + str(self.x) + ',' + str(self.y) + ')'
p1 = Point(1, 2) #변수에 정의한 클래스에 값을 담아준다.
p2 = Point(3, 4)
print(p1 + p2) #각 변수에 정의한 클래스를 더한다. 이때 +를 add로 인식하고 __add__에 담긴 코드를 실행한다.
class Book :
title = ' '
pages = 0
def __init__(self, title=' ', pages=0) :
self.title = title
self.pages = pages
def __str__(self) :
return self.title
def __add__(self, other) :
return self.pages + other.pages
book1 = Book('자료구조', 600)
book2 = Book('C언어', 700)
print(book1 + book2)
print(book1) #__str__ 자동 실행하므로 타이틀을 반환 함.
class Human:
def __init__(self, age, name):
self.age = age
self.name = name
def __str__(self) :
return '이름 %s, 나이 %d' % (self.name, self.age)
kim = Human(29, '신승희')
print(kim)
class Human:
def __init__(self, age, name):
self.age = age
self.name = name
def __len__(self) :
return self.age
kim = Human(29, '신유리')
print(len(kim))