Following the recommendations in type hint for an instance of a non specific dataclass, I was able to define a Protocol
to identify classes decorated with @dataclass
, i.e.
class DataclassProtocol(Protocol):
__dataclass_fields__: Dict
This works well, but I now need to distinguish between a (non-specific) dataclass class and a (non-specific) dataclass instance. The protocol above matches both so it can't be used to discriminate.
Based on the source code in https://github.com/python/cpython/blob/3.8/Lib/dataclasses.py, it seems that one possible discriminator is that dataclasses classes inherit from type
, while dataclasses instances do not.
Can this be used to derive type hints to discriminate correctly dataclass classes from dataclass instances? Or is there another way?