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