Wpis z mikrobloga

Mirki z #python #programowanie , mam pytanie dotyczące pierwszej ramki z kodem w tej dokumentacji

Co prawda jest to jakaś tam biblioteka, ale moje pytanie odnosi się raczej do działania samego Pythona. W skrócie PeeWee jest to taki ORM umożliwiający obiektowo zarządzać bazą danych. User i Tweet to tabele w bazie. BaseModel dziedziczy po klasie Model i jest to, o ile dobrze rozumiem, jakiś zestaw metod związany z tą biblioteką, który czyni ze zwykłej klasy klasę reprezentującą tabelę w bazie. W dokumentacji proponują, żeby utworzyć właśnie tą klasę BaseModel, w niej zadeklarować zmienną database i przypisać do niej odwołanie do instancji bazy danych.

Chciałbym teraz cały ten fragment kodu opakować w jakąś nadrzędną klasę. Chcę po prostu móc łatwo tworzyć wiele baz danych o identycznej strukturze, ale zapisanych w różnych miejscach na dysku. Za każdym razem jak chciałbym utworzyć nową bazę, tworzyłbym po prostu nową instancję tej klasy.

Tak by to miało wyglądać:
https://pastebin.com/cKtrip4w

Problem tkwi w linijce 10 (database = self.db) w klasie Meta która jest w klasie BaseModel. self odnosi się w tym przypadku do przestrzeni nazw klasy Meta a nie klasy DataSaver jak bym tego chciał.

Ma ktoś jakiś pomysł jak poprawnie osiągnąć ten sam efekt co w tym fragmencie kodu w dokumentacji, tj. przypisać DataSaver.db do zmiennej database w Meta? Nie mogę chyba utworzyć konstruktora w BaseModel, bo kontrolę nad tą klasą ma biblioteka której używam.
  • 1