Ponieważ muszę domyślne wartości niekoniecznie w konstruktorze, ale czasem z innych miejsc, wpadłem funkcji, które dodałem do mojej klasy bazowej obiektu:
Base = declarative_base()
class ItemBase(Base):
__abstract__ = True
def _ensure_defaults(self):
for column in self.__table__.c:
if getattr(self, column.name) is None and column.default is not None and column.default.is_scalar:
setattr(self, column.name, column.default.arg)
co oczywiście nie zadziała kalki. Nie mogłem wymyślić, jak to nazwać, a może jest na lepsze (czuć się jak hakowanie myśli już).
Z tego można zrobić coś takiego:
class User(ItemBase):
# ... inheritance, columns and stuff
def __init__(self):
self._ensure_defaults()
Mogę również wywołać metodę nie __init__
, ale także z innych metod, w przypadku I tylko trzeba polegać na wartościach w szczególnych okolicznościach (co Skończyło się usunięciem później, ponieważ było zbyt mylące). W niektórych przypadkach może to być bardziej elastyczne niż rozwiązanie @JamesEmerton.
Zobacz także: https://stackoverflow.com/a/48097586/6646912 – krassowski