假设有一个数据字典(可能来自数据库条目),用什么更正确的方法将该字典的数据包装在一个封装类中,该类可以控制数据可以设置为什么并作为什么返回?你知道吗
具体来说,我想到的两种方法是:
dict
继承的类__getitem__
和__setitem__
方法object
继承类中,为每个需要控制的数据项添加@property
装饰器。你知道吗例如:
class SmartContainer(dict):
## Format/check items as they are returned
def __getitem__(self,key):
if key == "birthday":
return "Happy Birthday!{bdate}".format(bdate=self.get('birthday'))
if key not in self.keys():
return 0
def __init__(self,baseDict):
super(SmartContainer,self).__init__(baseDict)
class SmartContainer2(object):
@property
def birthday(self):
return "Happy Birthday! {bdate}".format(bdate=self._birthday)
@birthday.setter
def birthday(self,value):
self._birthday = value
def __init__(self, baseDict):
[self.__setattr__(k,v) for k,v in baseDict.iteritems()]
在这个纯粹的任意示例中,我有两个类实现了每个体系结构。你知道吗
smartContainer=SmartContainer({"pi":3.14, "birthday":"01/01/2016"})
smartContainer['birthday']
>>>'Happy Birthday! 01/01/2016'
smartContainer2=SmartContainer2({"pi":3.14, "birthday":"01/01/2016"})
smartContainer2.birthday
>>>'Happy Birthday! 01/01/2016'
两种方法都有效,在我看来,@property
decorator更广泛地用于此类操作。但是SmartContainer
类访问能力的动态特性对我来说似乎更为直接。又名smartContainer[dynamic_key]
对smartContainer2.__getattr__(dynamic_key)
。你知道吗
我想知道是否有理由使用一种方法而不是另一种方法,以及存在哪些潜在的陷阱?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐