将类重置为默认状态

时间:2015-03-21 00:51:09

标签: python python-2.7

在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;。使用字符串按名称访问属性似乎不太正确。

1 个答案:

答案 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())