如何获取类的所有已声明或仅键入的参数

问题描述 投票:0回答:1

如何编写一个函数来打印出具有类型的类的所有属性?

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
的属性。

python class inspect
1个回答
0
投票

要获取带有注释的类的属性,请使用

__annotations__
属性以字典形式返回结果

print(cls.__annotations__)
{'parent_param': <class 'str'>, 'parent_default': str | None}
© www.soinside.com 2019 - 2024. All rights reserved.