반응형
파이썬에는 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이 호출되었습니다.
이렇듯 매직 메서드를 활용하여 객체를 커스텀하여 사용할 수 있습니다.
처음에는 익숙하지 않아 모를 수 있는 개념들이지만 알아두면 객체를 다양하게 사용할 수 있습니다.
반응형
'나는 이렇게 학습한다 > Language' 카테고리의 다른 글
Python _ @property로 getter, setter 구현하기 (feat. 캡슐화) (0) | 2022.04.02 |
---|---|
Python _ @classmethod, @staticmethod 란 무엇인가? (0) | 2022.03.31 |
Python _ isinstance로 타입을 체크하자. (0) | 2022.03.30 |
JavaScript _ forEach로 배열 반복문 돌리는 방법 (0) | 2022.03.07 |
Python _ 리스트 요소 개수 세기(dictionary, collections) (0) | 2022.03.06 |