型—動的型の作成と組み込み型の名前—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/types
移動先:案内検索

types —動的な型の作成と組み込み型の名前

ソースコード: :source: `Lib / types.py`



このモジュールは、新しいタイプの動的作成を支援するユーティリティ関数を定義します。

また、標準のPythonインタープリターで使用されるが、 intstr のような組み込みとして公開されないいくつかのオブジェクトタイプの名前も定義します。

最後に、組み込みには十分に基本的ではない、いくつかの追加の型関連ユーティリティクラスと関数を提供します。

動的型の作成

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__メソッドがない場合、挿入順序を保持するマッピングが使用されるようになりました。

も参照してください

メタクラス
これらの関数でサポートされているクラス作成プロセスの詳細
PEP 3115 -Python3000のメタクラス
__prepare__名前空間フックが導入されました


types.resolve_bases(bases)

PEP 560 で指定されているように、MROエントリを動的に解決します。

この関数は、 type のインスタンスではない bases 内のアイテムを検索し、__mro_entries__メソッドを持つそのような各オブジェクトがアンパックされた結果に置き換えられるタプルを返します。このメソッドを呼び出すこと。 bases アイテムが type のインスタンスである場合、または__mro_entries__メソッドがない場合、それは変更されずに戻りタプルに含まれます。

バージョン3.7の新機能。

も参照してください

PEP 560 -タイピングモジュールとジェネリック型のコアサポート


標準の通訳者タイプ

このモジュールは、Pythonインタープリターを実装するために必要な多くのタイプの名前を提供します。 listiteratorタイプなど、処理中に偶発的に発生するタイプの一部を意図的に含めることは避けています。

これらの名前の一般的な使用法は、 isinstance()または issubclass()チェックです。

これらのタイプのいずれかをインスタンス化する場合、署名はPythonのバージョン間で異なる可能性があることに注意してください。

標準名は、次のタイプに対して定義されています。

types.FunctionType
types.LambdaType

ユーザー定義関数のタイプと lambda 式によって作成された関数。

監査イベントは、関数オブジェクトの直接インスタンス化に対してのみ発生し、通常のコンパイルでは発生しません。

types.GeneratorType
ジェネレーター関数によって作成された generator -iteratorオブジェクトのタイプ。
types.CoroutineType

async def 関数によって作成されたコルーチンオブジェクトのタイプ。

バージョン3.5の新機能。

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.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の新機能。

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_localsarray.array.typecodeなど、PyGetSetDefを使用して拡張モジュールで定義されているオブジェクトのタイプ。 このタイプは、オブジェクト属性の記述子として使用されます。 property タイプと同じ目的ですが、拡張モジュールで定義されたクラス用です。
types.MemberDescriptorType
datetime.timedelta.daysなど、PyMemberDefを使用して拡張モジュールで定義されているオブジェクトのタイプ。 このタイプは、標準の変換関数を使用する単純なCデータメンバーの記述子として使用されます。 property タイプと同じ目的ですが、拡張モジュールで定義されたクラス用です。
class types.MappingProxyType(mapping)

マッピングの読み取り専用プロキシ。 マッピングのエントリに関する動的なビューを提供します。つまり、マッピングが変更されると、ビューはこれらの変更を反映します。

バージョン3.3の新機能。

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()

基になるマッピングの値の新しいビューを返します。


追加のユーティリティクラスと関数

class types.SimpleNamespace

名前空間への属性アクセスと意味のあるreprを提供する単純な object サブクラス。

オブジェクトとは異なり、SimpleNamespaceを使用すると、属性を追加および削除できます。 SimpleNamespaceオブジェクトがキーワード引数で初期化されている場合、それらは基になる名前空間に直接追加されます。

このタイプは、次のコードとほぼ同等です。

class SimpleNamespace:
    def __init__(self, /, **kwargs):
        self.__dict__.update(kwargs)

    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        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の新機能。

types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)

クラスの属性アクセスを__getattr__にルーティングします。

これは記述子であり、インスタンスとクラスを介してアクセスしたときに異なる動作をする属性を定義するために使用されます。 インスタンスアクセスは通常のままですが、クラスを介した属性へのアクセスは、クラスの__getattr__メソッドにルーティングされます。 これは、AttributeErrorを発生させることによって行われます。

これにより、インスタンスでアクティブなプロパティを持ち、同じ名前のクラスで仮想属性を持つことができます(例については列挙型を参照)。

バージョン3.4の新機能。


コルーチンユーティリティ関数

types.coroutine(gen_func)

この関数は、ジェネレーター関数をコルーチン関数に変換し、ジェネレーターベースのコルーチンを返します。 ジェネレータベースのコルーチンはまだジェネレータイテレータですが、コルーチンオブジェクトと見なされ、待機可能です。 ただし、必ずしも__await__()メソッドを実装しているとは限りません。

gen_func がジェネレーター関数の場合、その場で変更されます。

gen_func がジェネレーター関数でない場合は、ラップされます。 collections.abc.Generator のインスタンスを返す場合、インスタンスは awaitable プロキシオブジェクトにラップされます。 他のすべてのタイプのオブジェクトはそのまま返されます。

バージョン3.5の新機能。