def _define_field_accessors(cls):
if not cls.PREDEFINED_TAGS:
cls.PREDEFINED_TAGS = list(set(cls.DATATYPE.keys()) - set(cls.POSFIELDS))
fieldnames = cls.POSFIELDS + cls.PREDEFINED_TAGS
if cls.NAME_FIELD and cls.NAME_FIELD not in fieldnames:
fieldnames.append(cls.NAME_FIELD)
for fieldname in fieldnames:
def get_method(self, fieldname):
return self.get(fieldname)
def set_method(self, value, fieldname):
return self._set_existing_field(fieldname, value)
setattr(cls, fieldname,
DynamicField(partial(get_method, fieldname = fieldname),
partial(set_method, fieldname = fieldname)))
def try_get_method(self, fieldname):
return self.try_get(fieldname)
setattr(cls, "try_get_" + fieldname,
partialmethod(try_get_method, fieldname = fieldname))
评论列表
文章目录