파이썬에서 매직 메서드는 더 특별한 동작을 정의하기 위해서 사용되는 특별한 이름을 가진 메서드다.
얘들은 두 개의 밑줄로 시작하여 두 개의 밑줄로 끝난다.
이들이 클래스안에 여러 동작들을 처리하도록 도와준다.
GPT한테 매서드 뭐있냐고 물어봤다.
그럼 매직메서드 예시코드로 가보자.
- 매직매서드 예시코드
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __str__(self):
return f"Product: {self.name}, Price: {self.price}"
product = Product("Dolce Latte", 5100)
print(product)
# 실행하면 Product: Dolce Latte, Price: 5100
__str__이라는 매직매서드 덕분에 print(객체) 실행시 str함수 안에 있는 정보가 값으로 나온다.
__str__ 매직 메서드가 없었다면, 객체를 print 했을 때, 이러한 메모리 정보가 나온다.
__str__이 이러한 마법을 부려주는 것이다.
- Class로 비교 연산하기
어떤 물건을 갖다가 값으로 비교하는 일이 많아서 클래스로다가 비교하고 싶을 때가 있을 수 있다.
헬스장에 사람이 너무 많아, 3대무게를 모두 합한 값을 2명이서 비교하여 무게를 덜 치는 사람을 내보내기로 했다고 가정하자.
class HealthClub:
def __init__(self, squat, deadlift, benchpress):
self.squat = squat
self.deadlift = deadlift
self.benchpress = benchpress
def __lt__(self, other):
return self.squat + self.deadlift + self.benchpress < other.squat + other.deadlift + other.benchpress
person1 = HealthClub(100, 100, 145)
person2 = HealthClub(200, 250, 180)
print(person1 < person2) # True
이렇게 비교하면 print결과가 True가 나와서 역도선수였던 person2가 헬스클럽에 남고,
person1은 집으로 돌아가야한다.
- Class 안의 객체를 이용해서 인덱싱, 반복 구현할 수 있음.
어느 헬스클럽에 사람이 너무 많아졌다. 그래서 3대 무게가 400이하인 사람들은 모두 회원 자격을 박탈하고, 회원권을 모두 환불해주기로 했다. 그래서 data를 조회하여 3개무게가 400이하라면 앞으로 헬스장을 올 수 없게 한다고 가정하자.
class Above_400:
def __init__(self, files):
self.files = files
def __getitem__(self, index):
return self.files[index]
def __len__(self):
return len(self.files)
above_400 = Above_400([350, 410, 500, 550, 600, 300, 340, 370])
print(above_400[0]) # 350이 나옴
print(len(above_400)) # 8
첫 번째 회원의 data를 조회하니, 350이 나와서 이 회원은 앞으로 헬스장에 나올 수 없다.
저 새로만든 above_400이라는 인스턴스에 리스트처럼 조회할 수 있도록 한 것은 __getitem__(): 덕분이다.
이 친구를 통해 '[ ]'를 이용해서 객체의 요소를 가져올 수 있게 되는 것이다.
클래스의 객체 안에 있는 정보를 인덱싱할 때 굉장히 편리하다.
__len__(): 매서드를 통해서는 인스턴스 안에 몇 개의 요소가 있는가 확인해볼 수 있었다.
지금 회원수가 8명인데, 4명은 앞으로 헬스장에 나올 수 없을것이다 ㅠ..