|
|
|
|
|
|
|
|
|
|
|
|
|
import inspect |
|
from typing import Optional, List |
|
|
|
|
|
def simple_repr(obj, attrs: Optional[List[str]] = None, overrides={}): |
|
""" |
|
Return a simple representation string for `obj`. |
|
If `attrs` is not None, it should be a list of attributes to include. |
|
""" |
|
params = inspect.signature(obj.__class__).parameters |
|
attrs_repr = [] |
|
if attrs is None: |
|
attrs = params.keys() |
|
for attr in attrs: |
|
display = False |
|
if attr in overrides: |
|
value = overrides[attr] |
|
elif hasattr(obj, attr): |
|
value = getattr(obj, attr) |
|
else: |
|
continue |
|
if attr in params: |
|
param = params[attr] |
|
if param.default is inspect._empty or value != param.default: |
|
display = True |
|
else: |
|
display = True |
|
|
|
if display: |
|
attrs_repr.append(f"{attr}={value}") |
|
return f"{obj.__class__.__name__}({','.join(attrs_repr)})" |
|
|