2013-01-13 189 views
-1
>>> class StrictList(list): 
...  def __init__(self,content=None): 
...   if not content: 
...    self.content = [] 
...    self.type = None 
...   else: 
...    content = list(content) 
...    cc = content[0].__class__ 
...    if l_any(lambda x: x.__class__ != cc, content): 
...     raise Exception("List items must be of the same type") 
...    else: 
...     self.content = content 
...     self.type = cc 
... 
>>> x = StrictList([1,2,3,4,5]) 
>>> x 
[] 
>>> x.content 
[1, 2, 3, 4, 5] 

我想能夠調用x時不x.content我應該使用哪種方法?

+0

我已經編輯到我是希望能更清楚一點...... – beoliver

+0

*現在*您有:-) –

+0

一個問題,異常會過得更好是一個TypeException,太! – Ben

回答

2

您試圖繼承list但從未調用列表__init__方法返回的內容。加入:

super(StrictList, self).__init__(content) 

將項目添加到自我。有沒有需要分配給self.content

>>> class StrictList(list): 
...  def __init__(self,content=None): 
...   super(StrictList, self).__init__(content) 
... 
>>> s = StrictList([1, 2, 3]) 
>>> len(s) 
3 
>>> s[0] 
1 
+0

正是我所期待的。在時間允許的情況下接受 – beoliver

+1

Aaand for Python 3,你可以簡單地執行'super().__ init __(content)':) – 2013-01-13 23:20:45