Python:打印嵌套类
打印嵌套类内容的最佳方法是什么?例如:Python:打印嵌套类,python,class,printing,nested,Python,Class,Printing,Nested,打印嵌套类内容的最佳方法是什么?例如: class Library(): def __init__(self): self.shelves = [] self.shelf = self.Shelf() class Shelf(): def __init__(self): self.books = [] x = Library() 我知道如果类不是嵌套的,vars(x)可以工作。但如果是的话,我会得到这
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': []}
首先,我建议你不要嵌套类。实际上没有任何理由这样做 其次,您看到的正是您应该看到的:
shelf
变量的值是一个shelf
对象,您没有为它定义任何特殊的外观(或“复制”)。由于vars
不是递归的,因此可以看到带有内存位置的默认外观
如果要在打印工具架
对象时查看工具架
对象上的vars()
调用的内容,可以为工具架
定义一个调用vars()
的方法:
class Library():
def __init__(self):
self.shelves = []
self.shelf = self.Shelf()
class Shelf():
def __init__(self):
self.books = []
def __repr__(self):
return str(vars(self))
您的目标是拥有对象的字符串版本。Python知道两种方法:\uuuu repr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。第一个是字符串,如果将其解释为Python源代码,将重新生成它所表示的内容。如果您只调用vars(x)
您将收到给定x
中所有字段的dict
。大多数方法都是输出这个dict
(可能也是您的)使它调用其每个内容的\uuuu repr\uuuu()
函数。这就是为什么您会看到丑陋的字符串
,因为这是工具架
对象的\uu repr\uu()
我建议实施它,从而覆盖标准实施。您必须在工具架中执行此操作:
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()
当你这样做的时候,你也可以在你的库中做同样的事情;然后单独键入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()
谢谢,这正是我想要的。如果每个类都有我需要构建的参数,我会使用嵌套类来分解每个类。这对轻松打印出我需要的内容有很大帮助,谢谢。
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()