在Python中,将类重置为"默认状态"?的标准/常用方法是什么?例如,在将某些内容加载到类之前,您可能希望重置现有数据。
例如,请查看以下self.clear()
方法:
class ConLanguage:
SERIALIZABLE_ATTRIBUTES = \
["roots", "prefixes", "suffixes"...] #list of "important" fields
def __init__(self):
self.roots = []
self.prefixes = []
self.suffixes = []
.....
def clear(self): # <<--- this method
tmp = ConLanguage()
for attr in self.SERIALIZEABLE_ATTRIBUTES:
setattr(self, attr, getattr(tmp))
def loadFromDict(self, inDict):
defaultValues = ConLanguage()
for attr in self.SERIALIZABLE_ATTRIBUTES:
setattr(self, attr, inDict.get(attr, getattr(defaultValues.attr)))
def loads(self, s):
self.loadFromDict(json.loads(s))
这种方法似乎可以完成这项工作,但我想知道是否还有其他方法可以做到这一点。
other question(没有接受的答案)似乎涵盖了不同的问题 - 它有几个数字字段需要全部初始化为零,而在这种情况下有一堆成员具有不同默认状态 - 字典,数组,数字,字符串等。
所以它更少关于&#34;我如何迭代类属性&#34;更多关于:&#34; python是否有针对这种特殊情况的常用范例&#34;。使用字符串按名称访问属性似乎不太正确。
答案 0 :(得分:1)
如果您将SERIAIZABLE_ATTRIBUTES
更改为包含属性及其默认值的dict
,则可以避免初始化临时实例以复制属性,并通过调用clear来初始化对象,其中没有代码重复的情况。
class Foo:
SERIALIZABLE_ATTRIBUTES = {
'belongings' : list,
'net_worth' : float
}
def __init__(self):
self.clear()
def clear(self):
for k, v in SERIALIZABLE_ATTRIBUTES.items():
setattr(self, k, v())