CS

[Python] 클래스 메타프로그래밍

왕밤빵도라에몽 2025. 6. 1. 14:46
728x90

클래스 메타프로그래밍은 실행 도중에 클래스를 생성하거나 커스터마이즈하는 기술을 말한다.

type() 클래스 생성기(클래스 팩토리)

A = type('A', (object,), {'x': 10})
print(A().x)  # 10
  • 클래스를 동적으로 생성할 수 있음 (이름, 상속, 속성 다 지정 가능)
  • class A: 도 사실 내부적으로 type() 호출

-> 코드를 클래스로 만들고 싶을 때

metaclass 클래스를 만드는 클래스를 커스터마이징

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f'📦 클래스 생성됨: {name}')
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass
# 출력: 📦 클래스 생성됨: MyClass
  • 클래스가 정의되는 시점에서 가로채서 수정/검사/추가 가능
  • 속성 자동 삽입, 등록 시스템 등에서 사용

-> 클래스 정의를 자동화하거나 감시하고 싶을 때

__init_subclass__() 상속 시 자동 동작 삽입용 후크

class Base:
    def __init_subclass__(cls, **kwargs):
        print(f"🧬 {cls.__name__}가 Base를 상속함")

class Child(Base):
    pass
# 출력: 🧬 Child가 Base를 상속함
  • 어떤 클래스가 이 클래스를 상속하면 자동으로 실행
  • 메타클래스 없이도 상속 감지 + 자동 설정 가능

-> 상속하는 클래스들에게 공통 설정을 자동으로 주고싶을 때


References

-『 전문가를 위한 파이썬(2판) 』, 루시아누 하말류, 한빛미디어, Part 5 - Chapter 24

  • ChatGPT

  • 여긴 나중에 필요할 때 찾아보자.
728x90