2016-07-24 7 views
0

Ich habe mit den Grundlagen von Python für einige Zeit gearbeitet und fällt auf mysql für Datenanalyse zurück. Jetzt möchte ich lernen, wie man OOP auf die Python-Art macht, aber mit all dem Lesen über Klassen, Objekte und deren Attribute: Ich habe mich auf dem Weg verlaufen und experimentiert nach Richtungen.OOP-Workflow für Daten

Ich benutze Python-Modul ciscoconfparse, alle Schnittstellen zu lesen, und für jede Schnittstelle durch Tabellen durchlaufen, um zu filtern und mehr (Lieferant) Daten zu bekommen, die ich brauche. Als Beispiel ich folgende Daten haben kann:

dict = {  
    'Customer'  : 'customer1', 
    'supplier-con' : 'id823985', 
    'hostname'  : 'router01', 
    'interface'  : 'gig0/1', 
    'subinterface' : '101', 
    'dot1q'   : '111', 
    'qinq'   : '10101' 
} 

Baum klug, um die Beziehungen zu zeigen:
        die Tasten wie das Beispiel ohne die Werte unten aussehen:

Customer 1 : customer1 
----supplier-con : id823985 
-------hostname : router 1 
----------interface : gi0/1 
--------------subinterface : 101 
--------------subinterface : 111 

Customer 1 : customer1 
----supplier-con : id45223 
-------hostname : router 5 
----------interface : gi0/3 
--------------subinterface : 107 
--------------subinterface : 888 

Customer 2 : customer2 
----supplier-con : id625544 
-------hostname : router 2 
----------interface : gi0/2 
--------------subinterface : 202 
--------------subinterface : 222 

Sie können sehen, dass die Schnittstelle mehrfach mit mehr Subschnittstellen verwendet wird. Dies gilt auch für den Hostnamen und könnte für andere Details auf dem Weg sein.

In welcher Art und Weise sollte ich daran denken, 50000 Einträge im Speicher zu verwalten? Oder bin ich besser mit einer Datenbank?

Ich weiß, wie man dict-in-dicts erstellt, aber nicht, wie man Beziehungen untereinander unter Verwendung von tatsächlichen Objekten herstellt.

+1

Siehe [meine Antwort] (http://stackoverflow.com/a/15420716/355230) auf die Frage [_Was ist die beste Datenstruktur zum Speichern eines Satzes von vier (oder mehr) Werten? _] (Http: //stackoverflow.com/questions/15418386/what-is-the-best-data-structure-for-storing-a-set-of-our-or-more-values), die Nachschlagetabellen für jeden eindeutigen Wert von jedem erstellt Feld in der Datenbank (wenn und wenn benötigt). – martineau

+1

Beachten Sie außerdem, dass ein Schlüssel einem Wert, bei dem es sich um einen Container handelt, z. B. den genannten Diktaten, als Listen-in-dicts zugeordnet werden kann. So könnte beispielsweise der Schlüssel "subschnittstellen" ein Wert sein Liste von Elementen, wie '['101', '111']' oder sogar eine Liste von Wörterbüchern und diese Wörterbücher können andere Elemente in der Datenstruktur sein. Python referenziert, so dass die Daten in den Wörterbüchern nicht jedes Mal verdoppelt werden, wenn sie referenziert werden. – martineau

+0

Vielen Dank Martineau, das sind sehr gute Antworten, mit denen ich arbeiten kann, besonders Ihr gut geschriebenes CSV-Beispiel. Das werde ich versuchen. – Gaston

Antwort

1

Objektorientierung bezieht sich auf Objekte, die Bündel von Daten und Funktionen (oder Nachrichten, die die Objekte verstehen), die mit den Daten arbeiten. Anstatt mit einfachen Datenstrukturen zu beginnen und sie zu trennen, sollten Sie sich überlegen, welche Operationen Sie in Ihrem Programm ausführen möchten. Dann gruppieren Sie diese in Entitäten mit klaren, unterschiedlichen Verantwortlichkeiten. Die späteren werden deine Objekte sein.

Es könnte gut sein, dass das endgültige Design nicht der von Ihnen dargestellten Datengruppierung ähnelt und dass Sie nicht den gleichen Fluss wie in einem datenorientierten Ansatz sehen. Wenn dies ein Profi ist, ist das zur Diskussion offen.

+0

Ich habe angefangen, zuerst die Klassenbeziehungen in UML zu erstellen. . Die nächste einfache Phase könnte immer noch alle Informationen in einer Liste von Dicts enthalten, auf denen ich Funktionen zum Erstellen von Relationen leite, die ich in verschiedenen Dicts ablege. Aber ich frage mich immer noch, ob ich es schaffen kann, Informationen wie
print customer1.all-interfaces
zu erhalten, ohne durch ein dicts zu laufen, sondern rein durch Beziehungen zu fischen ... Muss an diesem Teil arbeiten – Gaston