28 lines
783 B
Python
28 lines
783 B
Python
import sys
|
|
|
|
if sys.version_info <= (3, 13):
|
|
|
|
def subclasses(cls: type) -> list[type]:
|
|
"""A proxy for `cls.__subclasses__()` on older Pythons."""
|
|
return cls.__subclasses__()
|
|
|
|
else:
|
|
|
|
def subclasses(cls: type) -> list[type]:
|
|
"""A helper for getting subclasses of a class.
|
|
|
|
Filters out duplicate subclasses of slot dataclasses and attrs classes.
|
|
"""
|
|
return [
|
|
cl
|
|
for cl in cls.__subclasses__()
|
|
if (
|
|
not (
|
|
"__slots__" not in cl.__dict__
|
|
and hasattr(cls, "__dataclass_params__")
|
|
and cls.__dataclass_params__.slots
|
|
)
|
|
and not hasattr(cls, "__attrs_base_of_slotted__")
|
|
)
|
|
]
|