types —動的な型の作成と組み込み型の名前
ソースコード: :source: `Lib / types.py`
このモジュールは、新しいタイプの動的作成を支援するユーティリティ関数を定義します。
また、標準のPythonインタープリターで使用されるが、 int や str のような組み込みとして公開されないいくつかのオブジェクトタイプの名前も定義します。
最後に、組み込みには十分に基本的ではない、いくつかの追加の型関連ユーティリティクラスと関数を提供します。
動的型の作成
- types.new_class(name, bases=(), kwds=None, exec_body=None)
適切なメタクラスを使用して、クラスオブジェクトを動的に作成します。
最初の3つの引数は、クラス定義ヘッダーを構成するコンポーネントです。クラス名、基本クラス(順番に)、キーワード引数(
metaclass
など)です。exec_body 引数は、新しく作成されたクラス名前空間にデータを入力するために使用されるコールバックです。 クラスの名前空間を唯一の引数として受け入れ、クラスの内容で名前空間を直接更新する必要があります。 コールバックが提供されていない場合は、
lambda ns: None
を渡すのと同じ効果があります。バージョン3.3の新機能。
- types.prepare_class(name, bases=(), kwds=None)
適切なメタクラスを計算し、クラスの名前空間を作成します。
引数は、クラス定義ヘッダーを構成するコンポーネントです。クラス名、基本クラス(順番に)、およびキーワード引数(
metaclass
など)です。戻り値は3タプルです:
metaclass, namespace, kwds
metaclass は適切なメタクラス、 namespace は準備されたクラスの名前空間、 kwds は渡された kwds 引数の更新されたコピーです。
'metaclass'
エントリが削除されました。 kwds 引数が渡されない場合、これは空のdictになります。バージョン3.3の新機能。
バージョン3.6で変更:返されたタプルの
namespace
要素のデフォルト値が変更されました。 メタクラスに__prepare__
メソッドがない場合、挿入順序を保持するマッピングが使用されるようになりました。
標準のインタプリタタイプ
このモジュールは、Pythonインタープリターを実装するために必要な多くのタイプの名前を提供します。 listiterator
タイプなど、処理中に偶発的に発生するタイプの一部を意図的に含めることは避けています。
これらの名前の一般的な使用法は、 isinstance()または issubclass()チェックです。
これらのタイプのいずれかをインスタンス化する場合、署名はPythonのバージョン間で異なる可能性があることに注意してください。
標準名は、次のタイプに対して定義されています。
- types.NoneType
なしのタイプ。
バージョン3.10の新機能。
- types.FunctionType
types.LambdaType ユーザー定義関数のタイプと lambda 式によって作成された関数。
監査イベントは、関数オブジェクトの直接インスタンス化に対してのみ発生し、通常のコンパイルでは発生しません。
- types.GeneratorType
- ジェネレーター関数によって作成された generator -iteratorオブジェクトのタイプ。
- types.AsyncGeneratorType
非同期ジェネレーターのタイプ-非同期ジェネレーター関数によって作成されたイテレーターオブジェクト。
バージョン3.6の新機能。
- class types.CodeType(**kwargs)
compile()によって返されるようなコードオブジェクトのタイプ。
監査された引数は、初期化子が必要とする名前または位置と一致しない場合があることに注意してください。 監査イベントは、コードオブジェクトの直接インスタンス化に対してのみ発生し、通常のコンパイルでは発生しません。
- replace(**kwargs)
指定されたフィールドに新しい値を持つコードオブジェクトのコピーを返します。
バージョン3.8の新機能。
- types.CellType
セルオブジェクトのタイプ:このようなオブジェクトは、関数の自由変数のコンテナーとして使用されます。
バージョン3.8の新機能。
- types.MethodType
- ユーザー定義クラスインスタンスのメソッドのタイプ。
- types.BuiltinFunctionType
types.BuiltinMethodType
- len()や sys.exit()などの組み込み関数のタイプ、および組み込みクラスのメソッド。 (ここで、「組み込み」という用語は「Cで書かれた」という意味です。)
- types.WrapperDescriptorType
object .__ init __()や object .__ lt __()など、一部の組み込みデータ型および基本クラスのメソッドの型。
バージョン3.7の新機能。
- types.MethodWrapperType
一部の組み込みデータ型および基本クラスの bound メソッドの型。 たとえば、
object().__str__
のタイプです。バージョン3.7の新機能。
- types.NotImplementedType
NotImplemented のタイプ。
バージョン3.10の新機能。
- types.MethodDescriptorType
str.join()などの一部の組み込みデータ型のメソッドの型。
バージョン3.7の新機能。
- types.ClassMethodDescriptorType
dict.__dict__['fromkeys']
などの一部の組み込みデータ型の unbound クラスメソッドの型。バージョン3.7の新機能。
- class types.ModuleType(name, doc=None)
モジュールのタイプ。 コンストラクターは、作成するモジュールの名前と、オプションでその docstring を取ります。
ノート
さまざまなインポート制御属性を設定する場合は、 importlib.util.module_from_spec()を使用して新しいモジュールを作成します。
- __doc__
モジュールの docstring 。 デフォルトは
None
です。
- __loader__
モジュールをロードしたローダー。 デフォルトは
None
です。この属性は、attr: __ spec __ オブジェクトに格納されている importlib.machinery.ModuleSpec.loader と一致します。
ノート
Pythonの将来のバージョンでは、デフォルトでこの属性の設定が停止される可能性があります。 この潜在的な変更を防ぐには、代わりに __ spec __ 属性から読み取るか、この属性を明示的に使用する必要がある場合は
getattr(module, "__loader__", None)
を使用することをお勧めします。バージョン3.4で変更:デフォルトは
None
です。 以前は、属性はオプションでした。
- __name__
モジュールの名前。 importlib.machinery.ModuleSpec.name と一致することが期待されます。
- __package__
モジュールが属するパッケージ。 モジュールがトップレベルの場合(つまり 特定のパッケージの一部ではない)の場合、属性は
に設定する必要があります。そうでない場合は、パッケージの名前(モジュールがパッケージの場合は __ name __ にすることができます)に設定する必要があります。自体)。 デフォルトは
None
です。この属性は、attr: __ spec __ オブジェクトに格納されている importlib.machinery.ModuleSpec.parent と一致します。
ノート
Pythonの将来のバージョンでは、デフォルトでこの属性の設定が停止される可能性があります。 この潜在的な変更を防ぐには、代わりに __ spec __ 属性から読み取るか、この属性を明示的に使用する必要がある場合は
getattr(module, "__package__", None)
を使用することをお勧めします。バージョン3.4で変更:デフォルトは
None
です。 以前は、属性はオプションでした。
- __spec__
モジュールのインポートシステム関連の状態の記録。 importlib.machinery.ModuleSpec のインスタンスであることが期待されます。
バージョン3.4の新機能。
- types.EllipsisType
省略記号のタイプ。
バージョン3.10の新機能。
- class types.GenericAlias(t_origin, t_args)
list[int]
などのパラメーター化されたジェネリックのタイプ。t_origin
は、list
、tuple
、dict
などのパラメーター化されていないジェネリッククラスである必要があります。t_args
は、t_origin
をパラメーター化するタイプのタプル(おそらく長さ1)である必要があります。>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
バージョン3.9の新機能。
バージョン3.9.2で変更:このタイプはサブクラス化できるようになりました。
- types.UnionType
共用体型式の型。
バージョン3.10の新機能。
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
sys.exc_info()[2]
にあるようなトレースバックオブジェクトのタイプ。使用可能な属性と操作の詳細、およびトレースバックを動的に作成するためのガイダンスについては、言語リファレンスを参照してください。
- types.FrameType
tb
がトレースバックオブジェクトの場合、tb.tb_frame
にあるようなフレームオブジェクトのタイプ。使用可能な属性と操作の詳細については、言語リファレンスを参照してください。
- types.GetSetDescriptorType
FrameType.f_locals
やarray.array.typecode
など、PyGetSetDef
を使用して拡張モジュールで定義されているオブジェクトのタイプ。 このタイプは、オブジェクト属性の記述子として使用されます。 property タイプと同じ目的ですが、拡張モジュールで定義されたクラス用です。
- types.MemberDescriptorType
datetime.timedelta.days
など、PyMemberDef
を使用して拡張モジュールで定義されているオブジェクトのタイプ。 このタイプは、標準の変換関数を使用する単純なCデータメンバーの記述子として使用されます。 property タイプと同じ目的ですが、拡張モジュールで定義されたクラス用です。
- class types.MappingProxyType(mapping)
マッピングの読み取り専用プロキシ。 マッピングのエントリに関する動的なビューを提供します。つまり、マッピングが変更されると、ビューはこれらの変更を反映します。
バージョン3.3の新機能。
バージョン3.9で変更: PEP 584 からの新しいユニオン(
|
)演算子をサポートするように更新されました。これは、基になるマッピングに委任するだけです。- key in proxy
基になるマッピングにキーキーがある場合は
True
を返し、そうでない場合はFalse
を返します。
- proxy[key]
キーキーを使用して基になるマッピングのアイテムを返します。 key が基になるマッピングにない場合、 KeyError を発生させます。
- iter(proxy)
基になるマッピングのキーに対してイテレータを返します。 これは
iter(proxy.keys())
のショートカットです。
- len(proxy)
基になるマッピング内のアイテムの数を返します。
- copy()
基になるマッピングの浅いコピーを返します。
- get(key[, default])
key が基になるマッピングにある場合は、 key の値を返します。それ以外の場合は、 default を返します。 default が指定されていない場合、デフォルトで
None
になるため、このメソッドで KeyError が発生することはありません。
- items()
基になるマッピングのアイテムの新しいビューを返します(
(key, value)
ペア)。
- keys()
基になるマッピングのキーの新しいビューを返します。
- values()
基になるマッピングの値の新しいビューを返します。
- reversed(proxy)
基になるマッピングのキーに対して逆イテレータを返します。
バージョン3.9の新機能。
追加のユーティリティクラスと関数
- class types.SimpleNamespace
名前空間への属性アクセスと意味のあるreprを提供する単純な object サブクラス。
オブジェクトとは異なり、
SimpleNamespace
を使用すると、属性を追加および削除できます。SimpleNamespace
オブジェクトがキーワード引数で初期化されている場合、それらは基になる名前空間に直接追加されます。このタイプは、次のコードとほぼ同等です。
class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented
SimpleNamespace
は、class NS: pass
の代わりとして役立つ場合があります。 ただし、構造化レコードタイプの場合は、代わりに namesdtuple()を使用してください。バージョン3.3の新機能。
バージョン3.9で変更: reprの属性の順序がアルファベットから挿入に変更されました(
dict
など)。
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)
クラスの属性アクセスを__getattr__にルーティングします。
これは記述子であり、インスタンスとクラスを介してアクセスしたときに異なる動作をする属性を定義するために使用されます。 インスタンスアクセスは通常のままですが、クラスを介した属性へのアクセスは、クラスの__getattr__メソッドにルーティングされます。 これは、AttributeErrorを発生させることによって行われます。
これにより、インスタンスでプロパティをアクティブにし、同じ名前のクラスで仮想属性を設定できます(例については、 enum.Enum を参照してください)。
バージョン3.4の新機能。
コルーチンユーティリティ関数
- types.coroutine(gen_func)
この関数は、ジェネレーター関数をコルーチン関数に変換し、ジェネレーターベースのコルーチンを返します。 ジェネレータベースのコルーチンはまだジェネレータイテレータですが、コルーチンオブジェクトと見なされ、待機可能です。 ただし、必ずしも
__await__()
メソッドを実装しているとは限りません。gen_func がジェネレーター関数の場合、その場で変更されます。
gen_func がジェネレーター関数でない場合は、ラップされます。 collections.abc.Generator のインスタンスを返す場合、インスタンスは awaitable プロキシオブジェクトにラップされます。 他のすべてのタイプのオブジェクトはそのまま返されます。
バージョン3.5の新機能。