gpt4 book ai didi

Python:打印嵌套类

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:52 25 4
gpt4 key购买 nike

打印嵌套类内容的最佳方式是什么?例如:

class Library():
def __init__(self):
self.shelves = []
self.shelf = self.Shelf()

class Shelf():
def __init__(self):
self.books = []


x = Library()

我知道 vars(x) 在类未嵌套时有效。但如果是,我会得到类似的东西:

{'shelf': <__main__.Shelf instance at 0x7f4bae723560>, 'shelves': []}

作为输出。我如何让 python 将其打印为:

{'shelf': {'books': []}, 'shelves': []}

最佳答案

您的目标是拥有对象的字符串版本。 Python 知道两种方法:__repr__()__str__() .第一个是一个字符串,如果将其解释为 Python 源代码,它将重新生成它所代表的内容。如果你调用vars(x)你收到一个dict给定 x 中的所有字段.大多数方法输出这个 dict (也可能是你的)让它调用 __repr__()每个内容的功能。这就是为什么你会看到那个难看的字符串 <__main__.Shelf instance at 0x7f4bae723560>因为那是 __repr__()你的Shelf对象。

我建议实现它,从而覆盖标准实现。您必须在 Shelf 中执行此操作:

class Library():
def __init__(self):
self.shelves = []
self.shelf = self.Shelf()

class Shelf():
def __init__(self):
self.books = []
def __repr__(self):
return repr(vars(self))

x = Library()

当你这样做的时候,你可以在你的 Library 中做同样的事情。还有;然后输入 x单独(即而不是 vars(x) )也会给出很好的输出:

class Library():
def __init__(self):
self.shelves = []
self.shelf = self.Shelf()
def __repr__(self):
return repr(vars(self))

class Shelf():
def __init__(self):
self.books = []
def __repr__(self):
return repr(vars(self))

x = Library()

当然,您可以将其重构并将该方面放入基类中:

class Representer(object):
def __repr__(self):
return repr(vars(self))

class Library(Representer):
def __init__(self):
self.shelves = []
self.shelf = self.Shelf()

class Shelf(Representer):
def __init__(self):
self.books = []

x = Library()

关于Python:打印嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32958701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com