使用__str__返回可变数量的不同内衬字符串?

时间:2016-12-14 22:22:29

标签: python string list repr

我正在开发一个创建" Facebook"在Python 3.x.我目前停留的部分是使用 str 函数返回不同行的字符串。

我正在使用的代码是:

class Status:
    likers = []
    commentObjs = []
    def __init__(self, statusPoster, statusMsg, likers, commentObjs):
        self.statuser = statusPoster
        self.status = statusMsg
        self.likers = likers
        self.commentObjs = commentObjs

def __str__(self):
    return '%s: %s \n"hello"' %(self.statuser,self.status)

__repr__= __str__

我遇到的问题是可能存在可变数量的likers和可变数量的commentObjs。

如果只有一个值,例如:

,我必须实现什么才能实现
likers = ["Spongebob"] 
commentObjs = ["Spongebob: You should watch the Spongebob movie!"]

它返回终端:

Brad Pitt will watch a movie today!
Spongebob likes this.
Spongebob: You should watch The Spongebob movie!

但是如果每个列表中有多个值,例如:

likers = ["Spongebob","Harry Potter"] 
commentObjs = ["Spongebob: You should watch the Spongebob movie!","Brad Pitt: How about nah?"]

它返回:

Brad Pitt will watch a movie today!
Spongebob, Harry Potter likes this.
Spongebob: You should watch The Spongebob movie!
Brad Pitt: Nah, I will probably watch Mr and Mrs. Smith.

我认为可能做到这一点的唯一方法是使用for循环和len(likers),但我不知道如何在仍然返回常量值的情况下执行此操作名称和状态。

1 个答案:

答案 0 :(得分:1)

您在这里寻找str.join()。这允许您连接多个字符串之间的连接字符串(可以为空):

>>> likers = ['Spongebob', 'Harry Potter']
>>> ', '.join(likers)
'Spongebob, Harry Potter'
>>> ' -> '.join(likers)
'Spongebob -> Harry Potter'

您可能还想了解str.format()将值插入模板字符串:

def __str__(self):
    likers = ', '.join(self.likers)
    comments = '\n'.join(self.commentObjs)
    return '{} {}\n{} likes this.\n{}'.format(
        self.statuser, self.status, likers, comments)

这会将您的likers值与逗号以及带有换行符的注释结合起来。

您不应将此作为__repr__;应生成调试输出,帮助您区分类的两个实例,可选择包含该输出的值。