Was die sauberste und die meisten pythonic Weg, dies zu lösen:Pythonic Superklasse mit Klassenmethoden Konstruktor: überschreiben, erben, ...?
eine Klasse mit einem @classmethod
Konstruktor wie in Codeb. 1. Aber jetzt Unterklasse mit zwei Klassen gegeben, die sowohl ein ganz anderes zusätzliches Argument erfordern, wie zum Beispiel in Codebeispiel 2. Sollte dies unter Verwendung von *args, **kwargs
(Beispiel 3) gelöst werden? Oder sollte ich die @classmethod
nicht erben, sondern in jeder Klasse kopieren? Oder erstellen Sie eine Superklasse def read_csv
und beziehen sich auf die Unterklassen '@classmethod
?
Unterklassen sind notwendig, da es in den Klassen andere komplexe Funktionen gibt.
Andere Personen, die mit diesem Code arbeiten, sollten wissen, welche Argumente bei der Initialisierung der verschiedenen Klassen zu übergeben sind.
Codebeispiel 1
class Car(object):
@classmethod
def from_csv(cls, csv):
df = pd.read_csv(csv)
# could be more complex
return cls(df)
def __init__(self, df):
self.df = df
Codebeispiel 2
class Ferrari(Car):
def __init__(self, df, ferrari_logo):
self.df = df
self.ferrari_logo = ferrari_logo
def somethingcomplex(self):
#complex ferrari method
def Fiat(Car):
def __init__(self, df, fiat_wheels):
self.df = df
self.fiat_wheels = fiat_wheels
def somethingcomplex(self):
#complex fiat method
Fiat.from_csv('fiat.csv', fiat_wheels=8)
Ferrari.from_csv('ferrari.csv', ferrari_logo='logo.jpg')
Codebeispiel 3
class Car(object):
@classmethod
def from_csv(cls, csv, *args, **kwargs):
df = pd.read_csv(csv)
# could be more complex
return cls(df, *args, **kwargs)
def __init__(self, df):
self.df = df
"die sauberste und am meisten pythonische Art" sieht aus wie meine Meinung zu mir. Auch Sie haben bereits eine funktionierende Lösung und es ist sauber und pythonisch genug. Wenn Sie denken, dass etwas in Ihrer Lösung nicht stimmt und Sie nach Wegen suchen, um es zu verbessern, möchten Sie vielleicht die Frage neu formulieren, zumindest würde es ein tatsächliches Problem zu lösen geben. – Goyo