【问题标题】:print nested objects with python and __repr__使用 python 和 __repr__ 打印嵌套对象
【发布时间】:2013-01-20 00:39:24
【问题描述】:

我很好奇我应该如何实现一个对象的 repr 方法,该对象包含实现 repr 的其他对象。

例如(pythonish):

class Book():
    def__repr__
        return 'author ... isbn'

class Library(): 
    def __repr__:
        me ='['
        for b in books:
            me = me + b.repr()
        me = me + ']'
        return me

我必须直接调用 repr() 方法吗?我似乎不能只连接它并让它隐式转换为字符串。

【问题讨论】:

  • 在python中没有自动转换为字符串的东西。您必须始终明确地在对象上使用 strrepr。顺便说一句,在你的情况下,我会这样做:return "[%s]" % ', '.join(repr(book) for book in books) 而不是那 5 行。
  • 谢谢。这回答了我关于隐式字符串转换的问题。

标签: python repr


【解决方案1】:

Book 实例上调用repr() 函数:

object.__repr__(self)[docs]

Called by the repr() built-in function and by string conversions (reverse quotes)
to compute the “official” string representation of an object. [...] The return 
value must be a string object. If a class defines __repr__() but not __str__(),
then __repr__() is also used when an “informal” string representation of 
instances of that class is required.

class Book(object):    
    def __repr__(self):
        return 'I am a book'

class Library(object):    
    def __init__(self,*books):
        self.books = books
    def __repr__(self):
        return ' | '.join(repr(book) for book in self.books)

b1, b2 = Book(), Book()
print Library(b1,b2)

#prints I am a book | I am a book

【讨论】:

  • 应该可以复制和粘贴规范表示并获取生成它的原始对象,我认为在输出中使用| 是不可能的。 “如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。”
  • @endolith -- 你说得对,这更像是一个愚蠢的例子,repr 是如何工作的,有点像书架,而不是建议应该如何实际实施。跨度>
【解决方案2】:

你想要repr(b),而不是b.reprrepr 是一个函数。 __repr__ 是在对象上调用 repr 时调用的魔术方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 2012-09-11
    • 2016-03-15
    • 1970-01-01
    • 2013-08-30
    • 2020-07-04
    • 2012-11-26
    • 2021-05-06
    相关资源
    最近更新 更多