【问题标题】:Defining __str__ and __repr__ for a set container为集合容器定义 __str__ 和 __repr__
【发布时间】:2013-01-28 07:10:47
【问题描述】:

我一直在处理一项大型任务,我几乎完成了,除了我需要帮助编写 Set 容器的 __str____repr__ 函数。

我从来没有这样做过,我不知道该怎么做。在网上搜索,我还是卡住了。

我尝试过类似的方法:

'%s(%r)' % (self.__class__, self)

我需要打印出这样的表示:

'set([ELEMENT_1, ELEMENT_2,..., ELEMENT_N])'

我的元素存储在一个数组类中,我围绕它编写了 set 容器。我使用for item in selfif item in self 之类的循环访问它

请帮忙?

【问题讨论】:

标签: python string repr


【解决方案1】:

我怀疑以下方法会起作用:

def __repr__(self):
    return 'set([%s])' % ', '.join(self)

【讨论】:

    【解决方案2】:

    请参阅此answer,详细说明__str____repr__ 之间的区别。

    一个基本的实现是这样的:

    def __repr__(self):
        return 'set(%r)' % [item for item in self]
    

    【讨论】:

      【解决方案3】:

      像这样简单的事情可能就足够了,并且可以同时兼顾这两种方法:

      class Set(object):
          def __init__(self):
              self.array = ...
      
          def __repr__(self):
              return '{}({!r})'.format(self.__class__.__name__, self.array)
      
          __str__ = __repr__
      

      【讨论】:

      • "如果__repr__ 被定义,而__str__ 没有被定义,对象的行为就像__str__=__repr__。" - reference
      • 确实如此。重点是格式字符串中的{!r},它将被替换为repr(self.array),当然,这将取决于它的确切含义——并使其成为面向对象的设计。
      猜你喜欢
      • 2020-02-07
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2011-04-11
      • 1970-01-01
      • 2017-08-06
      相关资源
      最近更新 更多