Ich habe ein Python-Modul, das eine Reihe von Klassen enthält, die jeweils ein bestimmtes physikalisches Material mit seinen Eigenschaften (z. B. Dichte, spezifische Wärme) darstellt. Einige der Eigenschaften sind nur float
Mitglieder der Klasse, aber viele hängen von einem Parameter ab, z. B. der Temperatur. Ich implementiert dies durch @staticmethod
s, dh alle Klassen aussehenModul mit Klassen mit nur statischen Methoden
class Copper(object):
magnetic_permeability = 1.0
@staticmethod
def density(T):
return 1.0/(-3.033e-9 + 68.85e-12*T - 6.72e-15*T**2 + 8.56e-18*T**3)
@staticmethod
def electric_conductivity(T, p):
return 1.0141 * T**2 * p
@staticmethod
def specific heat(T):
return ...
class Silver(object):
...
class Argon(object):
...
...
Die Class
es somit lediglich als Container fungieren für alle Daten, und die Fülle der @staticmethod
s hat mir den Verdacht, dass es eine mehr sein geeignetes Designmuster für diesen Anwendungsfall.
Irgendwelche Hinweise?
Wenn es statisch ist ... bedeutet das, dass es im Grunde feste Werte sind. Wenn dies der Fall ist, handelt es sich tatsächlich um Daten, die besser als herkömmliche Datenstrukturen behandelt werden können. Wörterbuch, wenn Sie es live erstellen möchten, etwas wie xml/yaml, wenn Sie von der Festplatte laden möchten. Ich habe sogar einmal eine Reihe von Klassen geschrieben, die ein XML laden und es als Attribute offenlegen, so dass Sie immer noch Dinge wie "metals.copper.magnetic_permeability * 4" tun können, obwohl 'metals' aus einem XML geladen wurde. so etwas könnte Ihnen das Beste aus beiden Welten geben ... –
Aber die Eigenschaften sind abhängig von der Temperatur etc. –
staticmethod scheint eigentlich ganz angemessen. –