PYTHON · 객체지향
__init_subclass__
__init_subclass__로 클래스가 상속될 때 자동으로 실행되는 로직을 정의합니다. 메타클래스보다 간단합니다.
객체지향고급__init_subclass__메타클래스플러그인등록
핵심 설명
__init_subclass__로 클래스가 상속될 때 자동으로 실행되는 로직을 정의합니다. 메타클래스보다 간단합니다.
Python code
class Plugin:
"""플러그인 자동 등록 시스템"""
_registry: dict[str, type] = {}
def __init_subclass__(cls, *, name: str = "", **kwargs):
super().__init_subclass__(**kwargs)
reg_name = name or cls.__name__.lower()
Plugin._registry[reg_name] = cls
print(f"플러그인 등록: {reg_name}")
@classmethod
def get_plugin(cls, name: str):
return cls._registry.get(name)
@classmethod
def list_plugins(cls):
return list(cls._registry.keys())
class JSONPlugin(Plugin, name="json"):
def process(self, data):
return f"JSON: {data}"
class XMLPlugin(Plugin, name="xml"):
def process(self, data):
return f"XML: {data}"
class CSVPlugin(Plugin): # name 생략 → 클래스명 사용
def process(self, data):
return f"CSV: {data}"
print(Plugin.list_plugins()) # ['json', 'xml', 'csvplugin']
plugin = Plugin.get_plugin("json")()
print(plugin.process({"key": "value"}))학습 팁
__init_subclass__는 메타클래스 없이 서브클래스 생성을 가로채는 가장 간단한 방법입니다.
주의할 점
__init_subclass__에서 super().__init_subclass__(**kwargs)를 호출하지 않으면 다중 상속 시 체인이 끊어집니다.
자주 묻는 질문
__init_subclass__란 무엇인가요?
__init_subclass__ 로 클래스가 상속될 때 자동으로 실행되는 로직을 정의합니다. 메타클래스보다 간단합니다.
__init_subclass__ 학습 시 주의할 점은 무엇인가요?
__init_subclass__ 에서 super().__init_subclass__(**kwargs) 를 호출하지 않으면 다중 상속 시 체인이 끊어집니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.