ich habe eine Frage zu einer Designentscheidung. Ich habe eine Klasse "Wasser" definiert. Wasser kann sehr viele Eigenschaften aufweisen. Temperatur, Aggregatszustand, Färbung, Geruch und kommt es zu den Inhaltsstoffen kann es richtig unübersichtlich werden. In meinem Modul gibt es Funktionen, die als Parameter eine Instanz der Klasse Wasser übergeben bekommen wollen. Die Funktionen wissen dann damit umzugehen und der Nutzer bekommt das gewünschte Ergebnis. Nun steh ich vor folgender Wahl: Macht es Sinn, alle möglichen Attribute bereits zu Beginn festzulegen und mit None als Default zu versehen, oder sollen die Attribute erst zur Laufzeit ergänzt werden? Gefühlt wäre mir die zweite Variante lieber, das würde meine Wasser-Klasse nicht unnötig überladen. Aber man müsste dann an anderer Stelle dem Nutzer kenntlich machen, welche Attribute der Klasse zugewiesen werden können/sollten, wenn er bestimmte Funktionen ausführen möchte. Dies könnte über den Docstring der Funktion erfolgen. Spätestens bei
Code: Alles auswählen
AttributeError: 'Water' object has no attribute 'temperature'
Übrigens möchte ich bewusst hier keine Klassenmethoden sondern Funktionen haben. In der Regel soll nämlich nicht nur "Wasser" übergeben werden. Eine Möglichkeit wäre zum Beispiel die Mischung verschiedener Wässer und daraus resultierende Änderung der Zusammensetzung. Oder ein Objekt soll in das Wasser getaucht werden und der Auftrieb soll berechnet werden.