2016-10-12 47 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

它的工作原理。感谢您的回复。 –