比较2种不同的方法来创建模仿字典的类

时间:2014-02-03 09:45:40

标签: python json dictionary

代码A / B是否优于其他代码? 我将需要很多这样的类来定义实体,以便

  1. 我可以访问各个字段,例如我正在访问类属性
  2. 而不是普通的json,我可以确定某个级别的子字段类型,然后根据相同的方式运行一些方法
  3. 给定实体可以是具有相同或不同类型的多个实体的组合
  4. 代码A:

    class AProfile(object):
        """ composed of list of list of information heads
        """
        def __init__(self):
            object.__setattr__(self, 'info', {"name": None,
                                             "pid": None,
                                             "interests": []
                                             "score": 0})
        def __getitem__(self, attribute):
            return self.info[attribute]
        def __setitem__(self, attribute, value):
            self.info[attribute] = value
        def __getattr__(self, attribute):
            return self.info[attribute]
        def __setattr__(self, attribute, value):
            if attribute.startswith('_'):
                super(AProfile, self).__setattr__(attribute, value)
            else:
                self.info[attribute] = value
    

    代码B:

    class BProfile(dict):
        """
        """
        def __getattr__(self, attribute):
            return self[attribute]
        def __setattr__(self, attribute, value):
            self[attribute] = value
    

1 个答案:

答案 0 :(得分:1)

是的,第二种方法有一个主要优势。

在第一种情况下:
你必须重新发明轮子。而且你最终可能会在实现中使用字典。您必须实现字典中已有的各种方法,如比较方法,运算符方法等。

而在第二种情况下:
它建立在现有的dict对象上。无需重新发明轮子,只需添加一些铃铛和口哨。

  

注意:collections.OrderedDict是使用第二种方法实现的。