Skip to main content
 首页 » 编程设计

Python:打印嵌套类

2025年05月04日13Leo_wl

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

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()