코드로 우주평화

Python _ magic method를 사용하여 객체 커스텀하기 본문

나는 이렇게 학습한다/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이 호출되었습니다.

 

 

 


 

 

 

 

이렇듯 매직 메서드를 활용하여 객체를 커스텀하여 사용할 수 있습니다.

처음에는 익숙하지 않아 모를 수 있는 개념들이지만 알아두면 객체를 다양하게 사용할 수 있습니다.

 

 

 

반응형