代码A / B是否优于其他代码? 我将需要很多这样的类来定义实体,以便
代码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
答案 0 :(得分:1)
是的,第二种方法有一个主要优势。
在第一种情况下:
你必须重新发明轮子。而且你最终可能会在实现中使用字典。您必须实现字典中已有的各种方法,如比较方法,运算符方法等。
而在第二种情况下:
它建立在现有的dict
对象上。无需重新发明轮子,只需添加一些铃铛和口哨。
注意:
collections.OrderedDict
是使用第二种方法实现的。