В 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 (который не принимаются ответы), кажется, чтобы покрыть diferrent проблему - она имеет несколько числовых полей, которая должна быть инициализированы с нуля, в то время как в этом случае есть куча элементов, которые имеют разные по умолчанию - словари, массивы, числа, строки и т. д.
Значит, это было меньше о том, «как я повторяю атрибуты класса» и больше о: «делает ли python обычно используемой парадигмой для этой конкретной ситуации». Доступ к атрибутам по их именам с помощью строк не кажется вполне правильным.
Питона '' HTMLParser' использует сброс() ', так что одна точка данных, но в целом, я бы утверждать, что вы должны просто сделать новый экземпляр, а не повторное использование старого. Обычно создание новых экземпляров не является таким узким местом, которого нужно избегать. – kindall
@michaelpri: Я хотел бы указать, что другой вопрос не принял ответ. Ни один из предложенных ответов не является альтернативной техникой. – SigTerm
@kindall: Ваше предложение разумно, но оно не применяется во всех случаях. Если объект должен оставаться в живых на некоторое время и настроить его содержимое в ответ на одно из его изменений поля, «новые экземпляры» могут быть неприменимы. ИМО. – SigTerm