1313)
1414from typing import Any
1515
16+ import optype as opt
1617from plum import dispatch
1718
1819from .register_base import _recursive_replace_helper
19- from .types import DataclassInstance
2020
2121# ===================================================================
2222
2323if sys .version_info < (3 , 13 ):
2424
2525 @dispatch
26- def get_field (obj : DataclassInstance , k : str , / ) -> Any :
26+ def get_field (obj : opt . dataclasses . HasDataclassFields , k : str , / ) -> Any :
2727 """Get a field of a dataclass instance by name.
2828
2929 Examples:
@@ -49,7 +49,9 @@ def get_field(obj: DataclassInstance, k: str, /) -> Any:
4949if sys .version_info < (3 , 13 ):
5050
5151 @dispatch
52- def replace (obj : DataclassInstance , / , ** kwargs : Any ) -> DataclassInstance :
52+ def replace (
53+ obj : opt .dataclasses .HasDataclassFields , / , ** kwargs : Any
54+ ) -> opt .dataclasses .HasDataclassFields :
5355 """Replace the fields of a dataclass instance.
5456
5557 Examples:
@@ -72,7 +74,9 @@ def replace(obj: DataclassInstance, /, **kwargs: Any) -> DataclassInstance:
7274 return _dataclass_replace (obj , ** kwargs )
7375
7476 @dispatch # type: ignore[no-redef]
75- def replace (obj : DataclassInstance , fs : Mapping [str , Any ], / ) -> DataclassInstance :
77+ def replace (
78+ obj : opt .dataclasses .HasDataclassFields , fs : Mapping [str , Any ], /
79+ ) -> opt .dataclasses .HasDataclassFields :
7680 """Replace the fields of a dataclass instance.
7781
7882 Examples:
@@ -127,7 +131,7 @@ def replace(obj: DataclassInstance, fs: Mapping[str, Any], /) -> DataclassInstan
127131
128132
129133@dispatch
130- def fields (obj : DataclassInstance , / ) -> tuple [Field , ...]: # type: ignore[type-arg] # TODO: raise issue in beartype
134+ def fields (obj : opt . dataclasses . HasDataclassFields , / ) -> tuple [Field , ...]: # type: ignore[type-arg] # TODO: raise issue in beartype
131135 """Return the fields of a dataclass instance.
132136
133137 Examples:
@@ -154,7 +158,7 @@ def fields(obj: DataclassInstance, /) -> tuple[Field, ...]: # type: ignore[type
154158
155159@dispatch
156160def asdict (
157- obj : DataclassInstance ,
161+ obj : opt . dataclasses . HasDataclassFields ,
158162 / ,
159163 * ,
160164 dict_factory : Callable [[list [tuple [str , Any ]]], dict [str , Any ]] = dict ,
@@ -184,7 +188,7 @@ def asdict(
184188
185189@dispatch
186190def astuple (
187- obj : DataclassInstance ,
191+ obj : opt . dataclasses . HasDataclassFields ,
188192 / ,
189193 * ,
190194 tuple_factory : Callable [[Any ], tuple [Any , ...]] = tuple ,
0 commit comments