2016-12-14 58 views
-1

我正在研究一個在Python 3.x中創建「Facebook」的項目。我目前所使用的部分是使用str函數來返回不同行上的字符串。使用__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)的唯一途徑,但我不知道我怎麼會是能夠做到這一點,同時還返回名稱的常數值和狀態。

+0

我強烈建議不要使用它作爲你的'__repr__'。 – user2357112

回答

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__;這應該會產生調試輸出,幫助您區分類的兩個實例,可選地使用該輸出的包含值部分。

+0

我們還沒有學過格式,但是我能夠將.join實現到我的函數中,並讓它工作,感謝您的幫助和非常快的回覆:D #Upvoted! – CoopStad

相關問題