types — 내장 타입의 동적 생성과 이름

types — 내장 타입의 동적 생성과 이름

types 모듈은 동적으로 새 타입을 만들고 내장(built-in) 타입의 이름을 제공하는 헬퍼 함수들을 정의해요. 이 모듈이 제공하는 유틸리티의 대부분은 타입 자체의 조작에 유용하며, isinstance()와 같은 내장 함수를 돕는 데도 쓰여요.

출처: Python 표준 라이브러리 — types

본문

동적 타입 생성 (Dynamic Type Creation)

types.new_class(name, bases=(), kwds=None, exec_body=None)type()을 파이썬에서 호출하는 것과 같은 방식으로 클래스를 동적으로 생성해요. kwdsmetaclass 키는 메타클래스를 지정합니다.

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.LambdaTypeFunctionType의 별칭.
  • types.GeneratorType — 제너레이터-반복자(generator-iterator) 객체의 타입. FunctionType의 인스턴스에 yield가 있으면 생성됩니다.
  • types.AsyncGeneratorType — 비동기 제너레이터-반복자 객체의 타입.
  • types.CoroutineType — 코루틴 객체의 타입.
  • types.BuiltinFunctionType / types.BuiltinMethodTypelen()·sys.exit() 같은 내장 함수와 내장 메서드의 타입.
  • types.MethodType — 사용자 정의 클래스 인스턴스의 메서드의 타입. MethodType(function, instance).
  • types.GetSetDescriptorTypetype·FrameType.f_locals 같은 object.__getattribute__의 getset 디스크립터 타입.
  • types.MemberDescriptorTypedatetime.date·FrameType.f_lineno의 멤버 디스크립터 타입.
  • types.ModuleType(name, doc=None) — 모듈 타입. ModuleType으로 모듈을 만들 수 있어요. 버전 3.12에서 __spec____loader__가 자동으로 설정됩니다.
  • types.TracebackTypesys.exc_info()가 반환하는 트레이스백 객체의 타입.
  • types.FrameTypesys._getframe() 같은 프레임 객체의 타입.
  • types.CellType__closure__가 반환하는 cell 객체의 타입.
  • types.EllipsisType, types.NoneType, types.NotImplementedTypeEllipsis``, None, NotImplemented` 싱글턴의 타입.
  • types.GenericAlias — 예를 들어 list[int]처럼 제너릭 alias를 나타내는 파라미터화된 제너릭의 타입. GenericAlias로 만들 수 있어요.
  • types.UnionType — 비트 OR 연산으로 표현된 타입 결합(str | None 같은)의 타입.
  • types.ClassMethodDescriptorType, classmethodclassmethod·staticmethod 디스크립터 타입.
  • types.WrapperDescriptorTypeobject.__init__·object.__str__ 같은 메서드 래퍼 디스크립터 타입.
  • types.MethodWrapperType — 메서드 래퍼의 타입.
  • types.SimpleNamespace — 속성 접근이 가능한 namespaces를 아주 간단하게 만들 때 쓰는 객체. object의 하위 클래스로, __dict__가 비어 있지 않고 __eq__·__repr__을 제공합니다.

그 외 함수들

types.resolve_bases(bases)bases에서 __mro_entries__를 호출해 해석된 베이스를 반환해요.

types.MappingProxyType(mapping) — 매핑의 읽기 전용 뷰. mappingproxyMapping 뷰로, 접근·복사·비교·콘텐츠 테스트를 지원하지만 직접 수정할 수 없어요.

예시

동적으로 모듈을 만들고 타입을 검사하는 예:

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