types — 내장 타입의 동적 생성과 이름
types — 내장 타입의 동적 생성과 이름
types 모듈은 동적으로 새 타입을 만들고 내장(built-in) 타입의 이름을 제공하는 헬퍼 함수들을 정의해요. 이 모듈이 제공하는 유틸리티의 대부분은 타입 자체의 조작에 유용하며, isinstance()와 같은 내장 함수를 돕는 데도 쓰여요.
본문
동적 타입 생성 (Dynamic Type Creation)
types.new_class(name, bases=(), kwds=None, exec_body=None) — type()을 파이썬에서 호출하는 것과 같은 방식으로 클래스를 동적으로 생성해요. kwds의 metaclass 키는 메타클래스를 지정합니다.
types.prepare_class(name, bases=(), kwds=None) — 클래스를 만드는 데 필요한 메타클래스·네임스페이스·kwds를 계산하는 헬퍼. new_class()의 구현은 __prepare__를 호출하기 위해 이 함수를 사용해요.
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None) — 클래스 속성에 대한 런타임 속성 접근을 가능하게 하는 디스크립터 클래스. classmethod처럼 동작하며 속성 접근을 동적으로 처리합니다.
표준 인터프리터 타입 (Standard Interpreter Types)
이 모듈은 파이썬 인터프리터에서 특별한 의미를 갖는 타입들을 정의합니다.
types.FunctionType— 사용자 정의 함수의 타입.FunctionType(code, globals[, name[, argdefs[, closure]]])로 생성할 수 있어요.__defaults__,__kwdefaults__,__doc__,__name__,__qualname__,__module__,__annotations__,__type_params__등 속성이 있어요.types.LambdaType—FunctionType의 별칭.types.GeneratorType— 제너레이터-반복자(generator-iterator) 객체의 타입.FunctionType의 인스턴스에yield가 있으면 생성됩니다.types.AsyncGeneratorType— 비동기 제너레이터-반복자 객체의 타입.types.CoroutineType— 코루틴 객체의 타입.types.BuiltinFunctionType/types.BuiltinMethodType—len()·sys.exit()같은 내장 함수와 내장 메서드의 타입.types.MethodType— 사용자 정의 클래스 인스턴스의 메서드의 타입.MethodType(function, instance).types.GetSetDescriptorType—type·FrameType.f_locals같은object.__getattribute__의 getset 디스크립터 타입.types.MemberDescriptorType—datetime.date·FrameType.f_lineno의 멤버 디스크립터 타입.types.ModuleType(name, doc=None)— 모듈 타입.ModuleType으로 모듈을 만들 수 있어요. 버전 3.12에서__spec__과__loader__가 자동으로 설정됩니다.types.TracebackType—sys.exc_info()가 반환하는 트레이스백 객체의 타입.types.FrameType—sys._getframe()같은 프레임 객체의 타입.types.CellType—__closure__가 반환하는 cell 객체의 타입.types.EllipsisType,types.NoneType,types.NotImplementedType—Ellipsis``,None,NotImplemented` 싱글턴의 타입.types.GenericAlias— 예를 들어list[int]처럼 제너릭 alias를 나타내는 파라미터화된 제너릭의 타입.GenericAlias로 만들 수 있어요.types.UnionType— 비트 OR 연산으로 표현된 타입 결합(str | None같은)의 타입.types.ClassMethodDescriptorType,classmethod—classmethod·staticmethod디스크립터 타입.types.WrapperDescriptorType—object.__init__·object.__str__같은 메서드 래퍼 디스크립터 타입.types.MethodWrapperType— 메서드 래퍼의 타입.types.SimpleNamespace— 속성 접근이 가능한 namespaces를 아주 간단하게 만들 때 쓰는 객체.object의 하위 클래스로,__dict__가 비어 있지 않고__eq__·__repr__을 제공합니다.
그 외 함수들
types.resolve_bases(bases) — bases에서 __mro_entries__를 호출해 해석된 베이스를 반환해요.
types.MappingProxyType(mapping) — 매핑의 읽기 전용 뷰. mappingproxy는 Mapping 뷰로, 접근·복사·비교·콘텐츠 테스트를 지원하지만 직접 수정할 수 없어요.
예시
동적으로 모듈을 만들고 타입을 검사하는 예:
import types
# dynamic module
m = types.ModuleType("mymodule")
m.foo = lambda: "hello"
print(m.foo()) # hello
# check builtin type
print(isinstance(len, types.BuiltinFunctionType)) # True
SimpleNamespace 사용 예:
import types
ns = types.SimpleNamespace(a=1, b=2)
print(ns.a, ns.b) # 1 2