2016-10-12 86 views
0

我是一名剛接觸python的學生。我想要定義一個數組類,它使用字典作爲其唯一的成員變量。我假定Python實現了字典作爲唯一的結構化類型(即沒有數組,列表,元組等)。僅使用字典創建數組類

我在編寫這樣的程序時遇到了困難。

這是我的代碼:

class array(object): 
    def __init__(self): 
     self.dic={} 

    def __init__(self,diction): 
     self.dic = {} 
     for x in diction: 
      self.dic.append(x) 

    def __setitem__(self,key,value): 
     self.dic[key]=value 

    def __getitem__(self,key): 
     if key not in self.dic.keys(): 
      raise KeyError 
     return self.dic[key] 

我想要的程序這樣的工作方式:

a = array('a','b','c') #------output------ 

print(a) # ['a', 'b', 'c'] 

print(a[1]) # b 

a[1] = 'bee' 

print(a) # ['a', 'bee', 'c'] 

a[3] = 'day' 

print(a) # ['a', 'bee', 'c', 'day'] 

print(a[6]) # IndexError exception 

任何建議,意見。 :)

+0

爲什麼你有2 __init__函數? –

+1

Python不支持多重構造函數的重載,所以只會使用一個'__init__'(第二個)。使用默認參數 –

+1

我還建議您不要調用您的類數組 - 您將與相同名稱的python數據結構發生衝突。改稱MyArray或其他。 –

回答

1

有你的類定義了不少問題:

  • array已經是一個數據結構:更好地使用正確的Python類的命名規則(MyClass)重命名。
  • 您不能重載函數定義:最好使用解包操作符(*)來提取所有(如果有的話)參數。
  • 你不能追加到字典:你需要分配給一個鍵。
  • 由於您未指定__str__魔術方法,因此您致電print將顯示通用類名稱。由於dict是無序的,我在這裏做了一些有趣的事情,使它顯示爲排序,但我確信有更好的方法。
  • 無需在__getitem__中籌集KeyError,因爲無論如何都會引發此問題。
  • 最後,我更正了你的間距。

請注意,我只實現了使測試用例工作所必需的方法。

class MyArray(object): 
    def __init__(self, *diction): 
     self.dic = {} 
     for i, x in enumerate(diction): 
      self.dic[i] = x 

    def __setitem__(self, key, value): 
     self.dic[key] = value 

    def __getitem__(self, key): 
     return self.dic[key] 

    def __str__(self): 
     return str([self.dic[i] for i in sorted(self.dic.keys())]) 
+0

它的工作原理。感謝您的回覆。 –