본문 바로가기
Python/Basic

[파이썬, Python] 스페셜 메소드(Special Method)

by coding-choonsik 2023. 3. 10.
728x90
반응형
SMALL

1. 스페셜 메소드(Special Method)

 

  • 해당 메소드들을 재구현하면 객체에 여러가지 파이썬 내장 함수나 연산자에 원하는 기능을 부여할 수 있음
  • __시작해서__ 로 끝나는 특수 함수

 

  • 클래스의 전체 메소드를 알아보기
help(클래스명)

  • 파이썬의 str 클래스 메소드를 오버라이딩을 해보자.
# Point 클래스는 생성자를 통해 (x, y) 좌표를 입력받음
class Point:
  def  __init__(self, x, y):
    self.x = x
    self.y = y

# (3, 4) 튜플로 구성된 좌표 출력 
  def print_point(self):   
    print(f'({self.x}, {self.y})')

# 부모 클래스의 str()함수를 오버라이딩
def __str__(self):      
    return (f'({self.x}, {self.y})')       # return 값으로 반환, 변수에 저장 가능

# + 연산자를 오버라이딩 함 (객체 + 객체)
# 새로만든 객체를 Point 클래스를 통해 객체를 생성함 -> 메소드 사용 가능
def __add__(self, pt):     
    new_x = self.x + pt.x
    new_y = self.y + pt.y
    return Point(new_x, new_y)             

# - 연산자를 오버라이딩 함 (객체 - 객체)
def __sub__(self, pt):     
    new_x = self.x - pt.x
    new_y = self.y - pt.y
    return Point(new_x, new_y)

# len(): 두 좌표의 거리의 합이 되도록 오버라이딩
def __len__(self):         
    return self.x + self.y 

# indexing을 오버라이딩 (객체[0])
def __getitem__(self, index):    
    if index == 0:
      return self.x
    elif index == 1:
      return self.y
    else:               # index는 0, 1만 존재(좌표)
      return -1

p1 = Point(3, 4)     # 객체 생성
p1.print_point()
>>> (3, 4)     		 # print로 출력

# __str__
print(str(p1))
>>> (3, 4)

# str() 생략 되어 있음
print(p1) 
>>> (3, 4)

p2 = Point(5,8)      # 객체 생성



# __add__
p1 + p2
>>> <__main__.Point at 0x7f16da389430>    # 객체
p3 = p1 + p2         
print(p3)
>>> (8, 12)

# __sub__
p1 - p2
>>> <__main__.Point at 0x7f16da446bb0>	  # 객체
p4 = p1 - p2
print(p4)
>>> (-2, -4)

# __len__
print(len(p1)) 
>>> 7 

# __getitem__
p1[0]
>>> 3
p3[1]
>>> 12
p1[100]
>>> -1

 

728x90
반응형
LIST