如何编写一个函数来打印出具有类型的类的所有属性?
class Parent:
parent_param: str
parent_default: str | None = None
def find_params_meta(self):
...
# enter magic code, filter out methods and attributes starting with `"_"`
class Child(Parent):
child_param: str
_params_meta: dict[str, Any] | None = None
def __init__(self, parent_param: str, child_param: str):
self._params_meta = self.find_params_meta()
self.child_param = child_param
self.parent_param = parent_param
assert Child("parent param", "child param")._params_meta == {
"parent_param": {"types": [str]},
"parent_default": {"types": [str, None], "default": None},
"child_param": {"types": [str]},
}
parent_param
和 child_param
属性未实例化。
getattr(self, "parent_param")
升高 AttributeError: 'Child' object has no attribute 'parent_param'
。 type(self).__dict__
、dir(self)
或 inspect.getmembers(self)
不会打印它们。 inspect.get_annotations(type(self))
更接近,因为它打印 {'child_param': <class 'str'>, ...}
,但它不返回 Parent
的属性。
要获取带有注释的类的属性,请使用
__annotations__
属性以字典形式返回结果
print(cls.__annotations__)
{'parent_param': <class 'str'>, 'parent_default': str | None}