Sirius3 hat geschrieben:@MoonKid: Die Klasse MDatabase ist unnötig und macht ja auch gar nichts.
Die Klasse ist hier stark gekürzt. Sie macht also schon was. Desweiteren ist sie die logische Abstraktion der Datenbank und deren Vebindung. "Session" stellt nur die Abstraktion auf technischer Ebene dar. Ich muss die Funktionaltiät und Logik der Datenbank unabhängig von technischen Aspekten (z.B. die verwendete lib sqlalchemy) kapseln. Die Klasse hat durchaus ihre Daseinsberechtigung.
Anders gefragt: Wo würdest du die Instanz von Session verorten?
Grundsätzlich gilt, dass ich im globalen Namensraum keine Objekte haben möchte, außer Instanzen meiner eigenen Klassen, die diverse Internas kapseln.
Sirius3 hat geschrieben:declerative_base erzeugt diesmal wirklich eine Klasse, die man aber nur einmal für alle Tabellen-Klassen erzeugen sollte.
Verstehe. Wo sollte ich dann "Base" verorten. Hierbei fällt mir die Instanz von MDatabase ein. Wie gesagt, "Base" hat im globalen Namensraum nix zu suchen.
Sirius3 hat geschrieben: __init__ sollte zumindest das Basis-Klassen-__init__ aufrufen und ist in diesem Fall total unnötig, weil man beim Erzeugen einer Instanz alle Spalten als Keyword-Argumente übergeben kann.
Das mit init der Basisklasse versteh ich. Aber was meinst du mit Keyword-Argumenten?
Sirius3 hat geschrieben:Doppelte Unterstriche sollte man, wie überall, nicht benutzen.
Wie meinst du das? Mit doppelten Unterstrichen dekariere ich private member - soweit ich weiß. Damit fällt mir auch grad ein Fehler im Code auf. "weight" ist gar nicht privat, wie es eigentlich sein sollte.