나는 이렇게 학습한다/Language
Python _ magic method를 사용하여 객체 커스텀하기
daco2020
2022. 3. 31. 20:22
파이썬에는 magic method 라는 것이 있습니다.
흔히 __000__ 형태로 되어 있는 것을 의미하며 이는 파이썬 자체에 내장되어 있는 메서드들입니다.
# magic method 예시
'__class__', '__delattr__', '__dict__', '__dir__',
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__le__',
'__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'name'
이러한 매직 매서드는 커스텀도 가능합니다.
'__str__' 을 커스텀하여 객체 표시정보 바꾸기
일반적으로 객체 자체를 호출할 경우 객체에 대한 표시정보가 노출됩니다.
class Robot:
def __init__(self, name):
self.name = name
robot_a = Robot("robot_a")
print(robot_a)
>>> <__main__.Robot object at 0x7fb6b808ee50>
여기서 __str__을 커스텀 하면 원하는 값으로 객체의 표시정보를 바꿀 수 있습니다.
class Robot:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
robot_a = Robot("robot_a")
print(robot_a)
>>> robot_a
'__call__' 을 추가하여 객체를 함수처럼 호출하기
파이썬에서는 함수도 객체입니다.
그런데 일반 객체는 함수처럼 ()을 통해 호출할 수 없습니다.
()는 call이라고 볼 수 있습니다.
만약 일반 객체에 ()로 호출하게 되면 다음과 같은 에러를 보게 됩니다. 'not callable'
TypeError: 'Robot' object is not callable
만약 함수처럼 호출하고 싶다면, 클래스에 '__call__'을 추가하여 함수처럼 호출할 수 있습니다.
class Robot:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def __call__(self):
return f"{self.name}이 호출되었습니다."
robot_a = Robot("robot_a")
print(robot_a())
>>> robot_a이 호출되었습니다.
이렇듯 매직 메서드를 활용하여 객체를 커스텀하여 사용할 수 있습니다.
처음에는 익숙하지 않아 모를 수 있는 개념들이지만 알아두면 객체를 다양하게 사용할 수 있습니다.