반응형
파이썬은 동적 프로그래밍 언어로서, 클래스와 객체를 다루는데에 있어 유연하고 강력한 기능을 제공합니다.
이번 글에서는 파이썬의 메타클래스와 동적 클래스에 대해 알아보도록 하겠습니다!
1. 메타클래스의 역할
메타 클래스는 클래스의 클래스의 템플릿으로 'type' 클래스 자체도 사실은 메타 클래스의 한 예입니다. 메타 클래스를 활용하면 새로운 클래스를 정의할 때 생성 과정을 제어하거나 클래스에 추가 속성을 부여할 수 있습니다.
class Meta(type):
def __new__(cls, name, bases, attrs):
# cls: 메타클래스 자체를 나타냅니다.
# name: 생성될 클래스의 이름입니다.
# bases: 생성될 클래스가 상속받는 클래스들의 튜플입니다.
# attrs: 생성될 클래스의 속성과 메서드들을 담은 딕셔너리입니다.
# 클래스 생성 과정을 제어하거나 수정하는 코드를 이곳에 작성합니다.
# 예를 들어, 다음 코드는 클래스명을 출력합니다.
print(f"Creating class: {name}")
# attrs 딕셔너리에서 'inherit_var'라는 속성이 있는지 확인하고 출력합니다.
if 'inherit_var' in attrs:
print(f"Inherited variable: {attrs['inherit_var']}")
# 슈퍼클래스인 메타클래스의 __new__ 메서드를 호출하여 실제 클래스를 생성하고 반환합니다.
return super().__new__(cls, name, bases, attrs)
class Base:
inherit_var = 10
class MyClass(Base, metaclass=Meta):
class_var = 20
def __init__(self, value):
self.instance_var = value
obj = MyClass(30)
2. 동적 클래스
동적 클래스란 프로그램 실행 중에 클래스를 생성하고 조작하는 것을 의미하는데 파이썬은 동적 클래스 생성을 지원하고 'type()' 함수나 메타클래스를 사용하여 동적 클래스를 생성할 수 있습니다.
# 동적 클래스 생성 예제
class_attrs = {'class_var': 10}
DynamicClass = type('DynamicClass', (object,), class_attrs)
# 동적 클래스 사용 예제
obj = DynamicClass()
print(obj.class_var) # 출력: 10
위 예제에서 type() 함수를 사용하여 동적으로 클래스를 생성합니다. type() 함수는 클래스의 이름, 상속받을 클래스들의 튜플, 그리고 속성과 메서드를 담은 딕셔너리를 인자로 받습니다. 이렇게 생성된 DynamicClass 클래스는 class_var라는 클래스 변수를 가지며, 이를 객체를 생성한 후에 사용할 수 있습니다.
반응형
'파이썬(python) 기본' 카테고리의 다른 글
파이썬의 객체 : 변경 불가능한 객체(immutable), 변경 가능한 객체(mutable) (0) | 2023.12.27 |
---|---|
파이썬 가비지 컬렉션: 메모리 관리의 핵심, 참조 카운트 (0) | 2023.08.16 |
파이썬 기초: 네임스페이스와 스코프 이해하기 (0) | 2023.08.16 |
파이썬 파일 다루기: 입출력과 파일 처리 기초 (0) | 2023.08.16 |
파이썬 내장 함수, 표준 라이브러리: 다양한 내장 함수와 라이브러리 (0) | 2023.08.14 |