매직 메소드

  • 클래스 안에 정의된 함수를 메서드라고 부름
  • 메서드 중에서 __로 시작해서 __로 끝나는 메서드를 매직 메서드 라고함
  • 파이썬에서 클래스를 사용하면 사용자가 직접 타입을 만들 수 있음
  • 리스트, 튜플, 정수, 문자열 등과 같은 타입도 클래스를 통해 만들어짐

__init__

  • 생성자라고 불리는 초기화를 위한 메서드
  • 인스턴스화를 할 때, 즉 클래스를 변수에 할당할 때 자동적으로 실행됨
  • 객체 생성과 관련하여 데이터의 초기화를 실시하는 함수
class MyFunc:
    def __init__(self):
        print(f"객체를 생성할 때 자동적으로 실행")
        
a = MyFunc()

class MyFunc:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        print(self.a, self.b)

a = MyFunc(1, 2)
객체를 생성할 때 자동적으로 실행
1 2

__call__

  • 함수를 호출하는 것 처럼 클래스의 객체도 호출할 수 있게 만드는 메서드
  • 인스턴스가 호출될 때 실행됨
  • 파이썬의 함수는 사실 function 클래스의 객체임. 따라서 함수를 호출할 때 ()는 function 클래스에 정의된 __call__ 메서드를 호출하는 것임
class MyFunc:
    def __call__(self):
        print("호출됨")

a = MyFunc()
a()

class MyFunc:
    def __call__(self, a, b):
        self.a = a
        self.b = b
        print(self.a, self.b)
a = MyFunc()
a(1,2)
호출됨
1 2

__getattribute__

  • 변수가 어떤 객체를 바인딩하고 있을 때 .을 찍으면 호출되는 메서드
class MyFunc:
    def __getattribute__(self, item):
        print(item, "객체에 접근")
        
a = MyFunc()
a.data1
a.data2
data1 객체에 접근
data2 객체에 접근

__str__

  • 객체를 문자열로 표현한 것을 반환하는 메서드
  • str() 함수는 사실 내장 함수가 아닌 내장 클래스(str(False) == False.__str__())
class MyFunc:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return f"{self.name}, {self.age}"

a  = MyFunc("Mr.kim", 25)
print(a)
Mr.kim, 25

__del__

  • 소멸자라고 불리는 메서드
  • 객체가 소멸할 때 자동으로 실행됨
class MyFunc:
    def __init__(self):
        print("객체 생성")
    def __del__(self):
        print("객체 소멸")
        
a = MyFunc()
del a
객체 생성
객체 소멸
class MyFunc:
    area = 0
    
a = MyFunc()
a.area = 20
b = MyFunc()
b.area = 10
print(a.area + b.area)
30

기타 매직메서드

카테고리:

업데이트:

댓글남기기