객체 지향 프로그래밍에서 꽤 깔끔한 트릭을 할 수 있게 해주는 마법의 방법. 이러한 메서드는 접두사와 접미사로 사용되는 두 개의 밑줄(__)로 식별됩니다. 예를 들어 특정 조건이 충족되면 자동으로 호출되는 인터셉터로 기능합니다.
파이썬에서 __repr__은 객체의 "공식" 문자열 표현을 계산하는 데 사용되는 내장 함수이고, __str__은 객체의 "비공식" 문자열 표현을 계산하는 내장 함수입니다.
예시 코드
class String: # magic method to initiate object def __init__(self, string): self.string = string # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # print object location print(my_string)
출력
<__main__.String object at 0x000000BF0D411908>
예시 코드
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # print object location print(my_string)
출력
Object: Python
문자열을 추가하려고 합니다.
예시 코드
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) # Driver Code if __name__ == '__main__': # object creation my_string = String('Python') # concatenate String object and a string print(my_string + ' Program')
출력
TypeError: unsupported operand type(s) for +: 'String' and 'str'
이제 String 클래스에 __add__ 메소드 추가
예시 코드
class String: # magic method to initiate object def __init__(self, string): self.string = string # print our string object def __repr__(self): return 'Object: {}'.format(self.string) def __add__(self, other): return self.string + other # Driver Code if __name__ == '__main__': # object creation my_string = String('Hello') # concatenate String object and a string print(my_string +' Python')
출력
Hello Python