如何打印对象中的对象 - python 中的值和属性

how to print An object within an object - values and attributes in python

提问人:Ino 提问时间:10/23/2023 最后编辑:Ino 更新时间:10/23/2023 访问量:60

问:

我想打印对象中的对象 - Python 中的值和属性 我有一个包含 5 个属性的对象,当我执行“dir(obj)”时,我得到了 5 个属性;我想要这 5 个属性的所有值和属性。我写了这个

class A:
    def __init__(self):
        self.a = 1
        self.b = 2


oba = A()


class MyClass:
    def __init__(self):
        self.prop1 = "value1"
        self.prop2 = "value2"
        self.obj = oba


obj = MyClass()

for attr in dir(obj):
    if not attr.startswith("__"):
        print(attr, getattr(obj, attr))

在控制台中:

obj <__main__.a object at 0x0000015657DB8C88>
prop1 value1
prop2 value2

我想看看:

obj a 1  b 2
prop1 value1
prop2 value2
Python 对象

评论

1赞 kiner_shah 10/23/2023
请举例说明您想要什么。

答:

0赞 Stefano Fusai 10/23/2023 #1

这是解决您问题的简单方法。输出为:

obj a 1 b 2 
prop1 value1
prop2 value2
class A:
    def __init__(self):
        self.a = 1
        self.b = 2


oba = A()


class MyClass:
    def __init__(self):
        self.prop1 = "value1"
        self.prop2 = "value2"
        self.obj = oba


obj = MyClass()

for attr in dir(obj):
    if not attr.startswith("__"):
        val = getattr(obj, attr)

        if isinstance(val, A):
            print("obj", end=" ")

            for attr in dir(val):
                if not attr.startswith("__"):
                    print(attr, getattr(val, attr), end=" ")

            print()

        else:
            print(attr, val)

评论

0赞 Ino 10/23/2023
谢谢,很好,但我写的是一个例子 但是在原始项目中 - 每个属性可以是不同的类,我不知道它叫什么以及如何称呼
2赞 kiner_shah 10/23/2023 #2

只需添加一个方法即可:__str__A

class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __str__(self):
        return f"a {self.a} b {self.b}"

虽然,我不知道你为什么要使用 .我只需添加并一次性打印对象,例如:dir__str__MyClass

class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __str__(self):
        return f"a {self.a} b {self.b}"


oba = A()


class MyClass:
    def __init__(self):
        self.prop1 = "value1"
        self.prop2 = "value2"
        self.obj = oba

    def __str__(self):
        return f"MyClass(prop1={self.prop1}, prop2={self.prop2}, obj={self.obj})"


obj = MyClass()
print(obj)

指纹:MyClass(prop1=value1, prop2=value2, obj=a 1 b 2)

评论

0赞 Ino 10/23/2023
谢谢,很好,但我无法编辑 A 类
0赞 kiner_shah 10/23/2023
@Ino,哦,这很不幸。
1赞 John Coleman 10/23/2023 #3

这是一种使用的方法:vars

class A:
    def __init__(self):
        self.a = 1
        self.b = 2


oba = A()


class MyClass:
    def __init__(self):
        self.prop1 = "value1"
        self.prop2 = "value2"
        self.obj = oba


obj = MyClass()

for k,v in vars(obj).items():
    print(k, end = ': ')
    try:
        print(vars(v))
    except TypeError:
        print(v)

输出:

prop1: value1
prop2: value2
obj: {'a': 1, 'b': 2}

评论

0赞 Ino 10/23/2023
好!谢谢!
0赞 Ino 10/23/2023
我收到此错误''' E TypeError:vars() 参数必须具有 dict 属性 ''' 所以还没有帮助
0赞 John Coleman 10/23/2023
@Ino旨在捕获该错误。如果您收到该错误,那么您正在尝试在没有属性对象的东西上调用整体代码。解决方案是将整个代码包装在 .try...excepttry ... except