提问人:Ino 提问时间:10/23/2023 最后编辑:Ino 更新时间:10/23/2023 访问量:60
如何打印对象中的对象 - python 中的值和属性
how to print An object within an object - values and attributes in python
问:
我想打印对象中的对象 - 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
答:
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...except
try ... except
上一个:为什么子类不能覆盖父类的“__debugInfo”?
下一个:如何创建变量?
评论