首页 > 解决方案 > Python3:如何列出对象的类和实例属性?

问题描述

如何将类对象的属性和值打印到标准输出?我已经阅读了这个答案,但它 [大部分] 没用,因为__dict__Python 3 中不存在该方法。

并且vars也不返回类属性。

我可以在网上找到的解决方案似乎是使用检查标准库。但这在将类对象注入函数时很棒。例如:

def get_class_obj_attrs(obj):
    return inspect.getmembers(obj)

但我想要一个可以返回属性的类对象的方法。我想出了这个作为解决方案:

class MyClass:
    attr_1 = 0

    def __init__(self, x):
        self.attr_2 = x

    def __getattrs__(self):
        attrs = [i[0] for i in inspect.getmembers(self) if not i[0].startswith("_") and
                 not inspect.ismethod(i[1])]
        return attrs

    def __repr__(self):
        return f"MyClass: { {attr: self.__getattribute__(attr) for attr in self.__getattrs__()} }"

所以这可以像这样使用:

my_class = MyClass()
print(my_class)
--> "MyClass: {'attr_1': 0, 'attr_2': 'foo'}"

__getattrs__方法(不要与默认方法混淆__getattr__)依赖于一个库来运行,所以它并不理想(即使它是标准库)。

什么是正确的 Python3 方式来做到这一点,而不必跳过箍?肯定有内置的方法吗?

标签: python-3.x

解决方案


推荐阅读