cattrs.strategies パッケージ¶
コンバーターの高度な戦略。
- cattrs.strategies.configure_tagged_union(union, converter, tag_generator=<function default_tag_generator>, tag_name='_type', default=NOTHING)[ソース]¶
コンバーターを設定して、union (ユニオンであるべき) が、構造化されていないペイロード内の追加データであるタグを使って、構造化/非構造化されるようにします。
- パラメータ:
converter (BaseConverter) -- 戦略を適用するコンバーター。
tag_generator (Callable[[Type], str]) -- tag_generator 関数は、ユニオンの各メンバーをタグにマップするために使用され、そのタグは構造化されていないペイロードに含められます。デフォルトのタグジェネレーターは、クラスの名前を返します。
tag_name (str) -- タグが構造化されていないペイロードに設定されるキー。デフォルトでは、'_type'。
default (Type | Literal[_Nothing.NOTHING]) -- 構造化時にタグ情報が存在しない場合に使用されるオプションのクラス。
union (Any)
- 戻り値の型:
None
タグ付きユニオン戦略は、現在、dict の非構造化/構造化の基本戦略でのみ機能します。
Added in version 23.1.0.
- cattrs.strategies.configure_union_passthrough(union, converter)[ソース]¶
指定された型とそのサブセットのユニオンを検証して渡すことをサポートするようにコンバーターを設定します。
たとえば、すべての成熟した JSON ライブラリは、int、float、None、および文字列のユニオンをネイティブに生成することをサポートしています。この戦略を使用すると、コンバーターは、これらの型を含むユニオンを効率的に検証して渡すように設定できます。
最も重要な点は、別のライブラリ (この例では JSON ライブラリ) がユニオンの生成を処理し、コンバーターはそれを検証するように設定されていることです。
指定された型のリテラルもサポートされており、値によってチェックされます。
指定された型の NewType もサポートされています。
この戦略は、実行時間が O(1) であり、ユニオン内の型の順序に依存しないように設計されています。
ユニオンにクラスと 1 つ以上のサブクラスが含まれている場合、スーパークラスを検証するときにサブクラスも含まれます。
Added in version 23.2.0.
- パラメータ:
union (Any)
converter (BaseConverter)
- 戻り値の型:
None
- cattrs.strategies.include_subclasses(cl, converter, subclasses=None, union_strategy=None, overrides=None)[ソース]¶
コンバーターを設定して、attrs/dataclass cl が、それ自体とその戦略が適用されたときに定義されているすべてのサブクラスのユニオンであるかのように、構造化/非構造化されるようにします。
- パラメータ:
cl (type) -- ベースとなる attrs または dataclass クラス。
converter (C) -- この戦略が適用される Converter。この戦略は、
cattrs.BaseConverterでは機能しないことに注意してください。subclasses (tuple[type, ...] | None) -- 祖先が cl であるサブクラスのタプル。None のままにすると、サブクラスは、cl とその子孫の __subclasses__ メソッドを再帰的に使用して検出されます。
union_strategy (Callable[[Any, C], Any] | None) -- サブクラスのユニオンを曖昧さ回避するために使用するユニオン戦略を定義する、位置によって渡される 2 つの引数 (subclass_union、converter) の呼び出し可能オブジェクト。None (デフォルト) の場合、自動ユニークフィールド曖昧さ回避が使用されます。これは、ユニオンに参加するすべてのサブクラスが、他の兄弟クラスに存在しない属性名を持っている必要があることを意味します。
overrides (dict[str, AttributeOverride] | None) -- cl 属性名から、非構造化/構造化をカスタマイズするためのオーバーライド (
cattrs.gen.override()でインスタンス化) へのマッピング。
- 戻り値の型:
None
Added in version 23.1.0.
バージョン 24.1.0 で変更: オーバーライドが提供されていない場合、個々のクラスのフックは、オーバーライドなしで生成される代わりに、コンバーターのデフォルトを使用してコンバーターから取得されます。
- cattrs.strategies.use_class_methods(converter, structure_method_name=None, unstructure_method_name=None)[ソース]¶
そのようなメソッドが利用可能な場合、クラスのインスタンスを (非) 構造化するために専用のメソッドが使用されるようにコンバーターを設定します。そのような (非) 構造化メソッドが見つからない場合は、デフォルトの (非) 構造化が適用されます。
- パラメータ:
converter (BaseConverter) -- この戦略が適用される Converter。
cattrs.BaseConverterまたはその他の派生クラスを使用できます。structure_method_name (str | None) -- 構造化に使用するクラスメソッドの名前を持つオプションの文字列。提供されていない場合、クラスメソッドは構造化に使用されません。
unstructure_method_name (str | None) -- 非構造化に使用するクラスメソッドの名前を持つオプションの文字列。提供されていない場合、クラスメソッドは非構造化に使用されません。
- 戻り値の型:
None
ネストされたオブジェクトを (非) 構造化する場合は、(非) 構造化メソッドにコンバーターパラメーターを追加するだけで、そこにコンバーターが表示されます。
Added in version 23.2.0.