重置默认s类

2024-10-01 00:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在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(没有可接受的答案)似乎涵盖了不同的问题-它有几个数值字段需要全部初始化为零,而在这种情况下,有一堆成员具有不同的默认状态-字典、数组、数字、字符串等

因此,它不是关于“如何迭代类属性”的,而是关于“python是否有针对这种特殊情况的常用范式”。使用字符串按名称访问属性似乎不太正确。在


Tags: 方法selffor状态deftmpattributes重置
1条回答
网友
1楼 · 发布于 2024-10-01 00:25:25

如果您将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())

相关问题 更多 >