데이터 카드에 헤더 카드를 생성하기 위한 메타클래스를 작성하여, 클래스가 정의될 때 자동으로 공통 헤더 정보를 설정하도록 할 수 있습니다. 아래는 헤더 카드 목적의 메타클래스를 구현한 샘플 코드입니다.
헤더 카드 메타클래스 코드
from datetime import datetime
class HeaderMeta(type):
"""헤더 카드를 생성하는 메타클래스"""
def __new__(cls, name, bases, dct):
# 헤더 정보 기본값 추가
dct.setdefault("__header__", {
"author": "Unknown",
"version": "1.0",
"created_at": datetime.now(),
"description": f"{name} description not provided.",
})
return super().__new__(cls, name, bases, dct)
def set_header(cls, key, value):
"""헤더 정보 설정"""
if "__header__" in cls.__dict__:
cls.__header__[key] = value
else:
raise AttributeError("Header not defined in the class.")
def get_header(cls):
"""헤더 정보 가져오기"""
return cls.__header__
class DataCard(metaclass=HeaderMeta):
"""헤더 카드를 포함하는 데이터 카드"""
def __init__(self, name, data):
self.name = name
self.data = data
def display(self):
"""데이터 카드 정보 출력"""
print(f"Data Card: {self.name}")
print(f"Data: {self.data}")
@classmethod
def display_header(cls):
"""헤더 정보 출력"""
print("Header Information:")
for key, value in cls.__header__.items():
print(f" {key}: {value}")
# 사용 예제
if __name__ == "__main__":
# 기본 헤더 자동 설정
print("Default Header:")
DataCard.display_header()
# 헤더 수정
DataCard.set_header("author", "John Doe")
DataCard.set_header("description", "A general-purpose data card.")
DataCard.set_header("version", "2.0")
print("\nUpdated Header:")
DataCard.display_header()
# 데이터 카드 생성
card = DataCard(name="Sample Data", data={"key": "value"})
print("\nCard Details:")
card.display()
코드 설명
- HeaderMeta 메타클래스:
- 클래스 정의 시 __header__라는 공통 헤더를 자동으로 생성.
- __header__ 기본값에는 작성자, 버전, 생성 시간, 설명 등을 포함.
- set_header 메서드: 헤더 값을 업데이트할 수 있음.
- get_header 메서드: 현재 클래스의 헤더 정보를 반환.
- DataCard 클래스:
- HeaderMeta 메타클래스를 기반으로 작성된 데이터 카드 클래스.
- 클래스 수준에서 헤더 정보를 관리하며, 인스턴스 수준의 데이터와는 분리.
- 사용 예제:
- 기본 헤더를 확인하고, set_header 메서드를 사용하여 헤더 값을 수정.
- 데이터 카드를 생성하여 데이터와 헤더를 각각 출력.
실행 결과 (예시):
Default Header:
Header Information:
author: Unknown
version: 1.0
created_at: 2025-01-07 12:00:00.123456
description: DataCard description not provided.
Updated Header:
Header Information:
author: John Doe
version: 2.0
created_at: 2025-01-07 12:00:00.123456
description: A general-purpose data card.
Card Details:
Data Card: Sample Data
Data: {'key': 'value'}
주요 기능
- 헤더 자동 생성: 클래스 정의 시 기본 헤더가 자동으로 설정.
- 헤더 수정 가능: 클래스 수준에서 헤더 정보를 동적으로 수정 가능.
- 클래스와 인스턴스 데이터 분리: 헤더는 클래스 수준에서 관리하며, 인스턴스 데이터와 독립적.
이 메타클래스는 데이터 카드와 같은 객체의 공통 메타데이터(헤더 정보)를 관리하는 데 적합하며, 코드의 일관성을 유지하면서도 유연한 확장을 가능하게 합니다.
'데이터 카드 자료구조' 카테고리의 다른 글
[데이터 카드 자료구조] 메타클래스 기반 사용자 정의 예외 클래스 (0) | 2025.01.08 |
---|---|
[데이터 카드 자료구조] 푸터 카드를 생성하기 위한 메타클래스 (0) | 2025.01.07 |
[데이터 카드 자료구조] 히스토리 메타클래스 샘플 코드 (0) | 2025.01.07 |
[데이터 카드 자료구조] 히스토리 보조 카드 샘플 코드 (0) | 2025.01.07 |
[데이터 카드 자료구조] 데이터카드 콘테이터 클래스 샘플 코드 (0) | 2025.01.07 |