from abc import ABCMeta, abstractclassmethod class BaseModel: def _init(self, model, **params): for k, v in params.items(): pp = model.__dict__.get(k) if pp is not None: self.__dict__[k] = v def __init__(self, **params): self._row = None self._init(type(self), **params) _column = None @classmethod def get_column(cls): return cls._column @classmethod def get(cls): return "GET" @classmethod def get_by_id(cls, id): return "GET " + str(id) def save(self): self.Meta.database.save(self) def create(self): self.Meta.database.create(self) class Meta: database = None class Field: def __init__(self, caption, column): self._caption = caption self._column = column @property def caption(self): return self._caption @property def column(self): return self._column def __repr__(self): return self._caption def __str__(self): return self._caption