객체 지향 프로그래밍에서 꽤 깔끔한 트릭을 할 수 있게 해주는 마법의 방법. 이러한 메서드는 접두사와 접미사로 사용되는 두 개의 밑줄(__)로 식별됩니다. 예를 들어 특정 조건이 충족되면 자동으로 호출되는 인터셉터로 기능합니다.
파이썬에서 __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