Ich bin neu in Python und in OO Programmierung, also weiß ich nicht, ob die folgende Frage Sinn macht (... aber ich denke, es ist eine gute Möglichkeit zu lernen):Wie werden die in einer bestimmten Klasse in einer anderen Klasse generierten Daten verwendet? (in Python)
I ' Ich versuche, zwei Klassen zu haben. Eine, die Daten erzeugt (nennen Sie es DataGen()
) und eine andere, die in der Lage ist, diese Daten zu verarbeiten und mir einige Statistiken zu geben (nennen Sie es Stats()
). Ich möchte beide in verschiedene py-Dateien schreiben, um sie sauberer zu halten, und so kann ich Methoden zu Stats.py hinzufügen, ohne DataGen.py zu berühren. Etwas wie folgt aus:
In DataGen.py
class DataGen(object):
def __init__(self, number_of_samples, arg2):
self.X = np.zeros([number_of_samples,1])
# etc..
def samples(self):
# do some sampling and save it in self.X
In Stats.py
class Stats(object):
def __init__(self, something):
# something here to initialize
# etc..
def mean(self):
# calculate the mean using something like DataGen.X
Jetzt und hier kommt der Teil, wo ich verloren gehen. Ich möchte Stats()
arbeiten auf die Daten zu einer Instanz von DataGen()
, aber ich weiß nicht, wie die Daten in DataGen.X
zu Stats
, so dass ich die Daten verwenden kann jedes Mal, wenn ich mit DataGen.samples()
Probe.
Ich habe versucht, eine Instanz von DG = DataGen(arg1,arg2)
zu erstellen und dann dieses Objekt an S = Stats(DG)
übergeben. Wenn ich auf diese Weise initialisiere, änderten sich die Daten, die zur Schätzung der Statistik verwendet wurden, nicht, nachdem ich erneut mit DataGen.samples()
gesampelt hatte. Ich denke, jedes Mal, wenn ich sample, muss ich eine Instanz S = Stats(DG)
mit den neuen Daten erstellen. Das scheint schlecht zu sein ... kann ich diese Klasse Stats()
an die Daten von DataGen()
anhängen? Ist das eine schlechte Idee/ein schreckliches Konstrukt?
Ich weiß auch nicht, wie ich darüber nachdenken sollte, wenn ich etwas konstruiere, wo DataGen
die Methoden von Stats erbt, oder etwas ähnliches. Wenn DataGen
von Stats
erbt, aber Stats
benötigt die Daten von DataGen
, wie kann ich diese Schleife lösen? Wenn Stats
von DataGen
erbt, muss ich eine einzelne Instanz von Stats erstellen und dann mit der Probe statt DataGen
, wie Stats.DataGen.samples()
oder Stats.samples()
. Ich würde das nicht mögen, weil der Rest meines Codes DataGen()
verwendet und ich denke, dass es besser strukturiert ist, wenn ich Stats()
nicht verwende, um zu probieren!
Macht das Obige Sinn? Jeder Kommentar dazu wäre sehr hilfreich!
Ich würde Pandas Bibliothek ... (http://pandas.pydata.org/) – pez
überprüfen, wenn Sie Datagen-Objekt im Konstruktor übergeben und dann .samples() ausführen, die die internen Werte des Dataget-Objekts ändern, sollte es gesehen werden nach stats class, aber du musst deinen stat wiederholen. Können Sie den Code zeigen, dass Sie das Datagen in Stats-Konstruktor und Beispiel übergeben, wenn es nicht funktioniert, da ich denke, dass das Problem dort ist. Ihr OOP-Verständnis sieht gut aus – Hani