2013-02-12 36 views
1

我一直在做一個大型的任務,除了我需要幫助編寫集裝箱的__str____repr__函數之外,我幾乎完成了任務。爲一個集裝箱定義__str__和__repr__

我從來沒有這樣做,我不知道該怎麼做。在互聯網上搜索,我仍然堅持。

我已經試過類似:

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

我需要打印出這樣的表示:

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

我的元素存儲在我周圍寫了一組容器數組類。我訪問它像一個循環像for item in selfif item in self

請幫忙?

+0

這可以幫助你瞭解 [討論__repr__和__str __之間差異的堆棧溢出頁面[1] [1]:http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – Jroosterman 2013-02-12 21:07:32

回答

1

我懷疑下面將工作:

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

看到這個answer詳細__str____repr__之間的差異。

基本實現會是這樣的:

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

這似乎工作..謝謝!儘管我今天早些時候閱讀了該鏈接。 – 2013-02-12 21:24:58

0

一些簡單,因爲這可能不夠好,並且會採取兩種方法護理:

class Set(object): 
    def __init__(self): 
     self.array = ... 

    def __repr__(self): 
     return '{}({!r})'.format(self.__class__.__name__, self.array) 

    __str__ = __repr__ 
+0

「如果定義了__repr__',並且__str__不是,則該對象的行爲就像'__str __ = __ repr__'。」 - [參考](http://stackoverflow.com/a/2626364/1988505) – 2013-02-13 01:38:20

+0

夠正確。主要的一點是格式化字符串中的'{!r',它將被'repr(self.array)'取代,當然這將取決於它是什麼 - 並且使它成爲一個對象 - 面向設計。 – martineau 2013-02-13 07:26:44