Hast du dir mal z.B. die Klassenhirachie von Epidoc angesehen? 0o -> Ich finde das sehr hilfreich, dass in der Dokumentation auch Klassendiagramme/Packagediagramme benutzt werden. Gerade für außenstehende ist es so einfacher zu sehen was aufeinander aufbaut um die API zu verwenden...Leonidas hat geschrieben: Andererseits ist es sicher lustig ein paar Kästchen zu haben in denen die Klassennamen geschrieben sind und die mit Pfeilen verbunden sind. Aber wie soll mir das beim Programmieren helfen? Ich kann auch in die Deklarationszeile eier Klasse schauen und dann bin ich auch so schlau. Für die Dokumentatiion nehme ich sowieso help() oder IPythons ``??``-Werkzeug.
PySource2UML -> Umfrage!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, die "Ja"-Wertungen sind in der überzahl, nur haben die die für "Nein" gestimmt haben ihre Argumente dagegen gepostet.sape hat geschrieben:OK Leo und Jack, wenn da kein Interesse besteht, stecke ich da meine Energie auch nicht weiter rein und Schmeiße dann alles in den Papierkorb
Löst das Problem aber nicht. Metaprogrammierung kann nicht ohne weiteres dargestellt werden. Ein anderes Problem ist eben, dass Code in Python oft erst zur Ausführzeit vorhersehbar ist. Wenn eine Klasse ein Attribut nicht im Quellcode hat, muss es nicht heißen, dass es dieses Attribut nicht irgendwann zur Ausführzeit haben wird.sape hat geschrieben:Daher auch die Frage in meine Zitat, das du Zitiert hast, wegen eines eigenen neuen Format das auf Python zugeschnitten ist.Leonidas hat geschrieben: BlackJack hat ja schon angesprochen, dass sich einige Sachen in UML nicht darstellen lassen.
Nein, habe ich nicht. Also das heißt nur mal zum interessehalber, nachdem jemand eine solche schon generiert hat. Habe dafür nie Bedarf gehabt. Das einzige was ich bisher genutzt habe, sind die simplen Vererbungsgraphen der PyGTK-Dokumentation und das auch nur, um zu sehen in welcher Ebene ein Attribut definiert wurde. Sonst ist es nicht nötig gewesen. Die Python-Dokumentation hat so einen Graphen nicht, weil sie in der Regel ziemlich flach ist (flat is better than nested). Django hingegen ist eher schon verschachtelt, aber dank der genialen und umfassenden Dokumentation ist es nicht nötig die genaue Vererbungsstruktur zu wissen. In der Tat bringt es auch nicht viel, sie zu wissen, denn es interessiert eigentlich auch nicht. Es Interessiert welche Klasse welche Methoden hat, nicht aber wo diese Methoden herkommen. Mir ist es egal, ob eine Klasse die ich nutze von dieser oder jener Klasse abgeleitet ist. Solange sie die Funktionen bereitstellt, die ich benötige ist das doch völlig unwichtig. Es kann auch sein, dass die Klasse in Zukunft von einer anderen Klasse abgeleitet ist. Aber auch in diesem Fall ist, solange sich die API nicht ändert, kein Problem zu sehen.sape hat geschrieben:Hast du dir mal z.B. die Klassenhirachie von Epidoc angesehen? 0o -> Ich finde das sehr hilfreich, dass in der Dokumentation auch Klassendiagramme/Packagediagramme benutzt werden. Gerade für außenstehende ist es so einfacher zu sehen was aufeinander aufbaut um die API zu verwenden...
Als mich für einen außenstehenden ist es vor allem wichtig zu verstehen wie die API funktioniert, und nicht warum die API so ist wie sie ist.
Edit: Markup korrigiert.
Zuletzt geändert von Leonidas am Mittwoch 3. Januar 2007, 14:51, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Was genau ist das?Leonidas hat geschrieben: Löst das Problem aber nicht. Metaprogrammierung kann nicht ohne weiteres dargestellt werden.
Stimmt -> Mixins! Das habe ich ganz und gar nicht berücksichtigt da ich bisher keine Mixins genutzt habe (und immer noch nicht nutze) aber schon davon gelesen habe :-[ Jetzt wo du es erwähnst fällt mir auf das Mixins sowas sind. Oder? -> Also zur Laufzeit hinzugefügte Attribute und Methoden.Leonidas hat geschrieben: Ein anderes Problem ist eben, dass Code in Python oft erst zur Ausführzeit vorhersehbar ist. Wenn eine Klasse ein Attribut nicht im Quellcode hat, muss es nicht heißen, dass es dieses Attribut nicht irgendwann zur Ausführzeit haben wird.
Python ist zu dynamisch ^^ Nun verstehe ich auch BlackJacks einwand mit dem "Einfach?" als ich meinte das die Auswertung Simple ist.
OK, Jungs, vergessen wir das Thema. War ne sehr blöde Idee im nachhinein.
lg
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Metaprogrammierung kann man als Technik ansehen die Programme schreibt. Mit Metaklassen ist es möglich, das Verhalten von Klassen stark zu verändern. Ein simples Beispiel bringt Ian Bicking.sape hat geschrieben:Was genau ist das?Leonidas hat geschrieben: Löst das Problem aber nicht. Metaprogrammierung kann nicht ohne weiteres dargestellt werden.
Nein. Nimm mal diesen Code:sape hat geschrieben:Stimmt -> Mixins! Das habe ich ganz und gar nicht berücksichtigt da ich bisher keine Mixins genutzt habe (und immer noch nicht nutze) aber schon davon gelesen habe :-[ Jetzt wo du es erwähnst fällt mir auf das Mixins sowas sind. Oder? -> Also zur Laufzeit hinzugefügte Attribute und Methoden.
Code: Alles auswählen
class Everything(object):
def __getattr__(self, name):
return True
Code: Alles auswählen
>>> e = Everything()
>>> e.something
True
>>> e.something_else
True
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ja, stimmt im Wiki hatte ich mal glaube ich was davon gelesen aber nicht so recht verstanden.Leonidas hat geschrieben:Metaprogrammierung kann man als Technik ansehen die Programme schreibt. Mit Metaklassen ist es möglich, das Verhalten von Klassen stark zu verändern. Ein simples Beispiel bringt Ian Bicking.sape hat geschrieben:Was genau ist das?Leonidas hat geschrieben: Löst das Problem aber nicht. Metaprogrammierung kann nicht ohne weiteres dargestellt werden.
Ja das meine ich doch. Das nennt man doch Mixins.Leonidas hat geschrieben:[...]Nein. Nimm mal diesen Code:sape hat geschrieben:Stimmt -> Mixins! Das habe ich ganz und gar nicht berücksichtigt da ich bisher keine Mixins genutzt habe (und immer noch nicht nutze) aber schon davon gelesen habe :-[ Jetzt wo du es erwähnst fällt mir auf das Mixins sowas sind. Oder? -> Also zur Laufzeit hinzugefügte Attribute und Methoden.
Code: Alles auswählen
class Everything(object): def __getattr__(self, name): return True
Du siehst: eigentlich hat dei Klasse zur Definitionszeit die Attribute ``something`` und ``something_else`` nicht. Zur Lautzeit werden sie aber verfügbar.Code: Alles auswählen
>>> e = Everything() >>> e.something True >>> e.something_else True
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, das sind keine Mix-ins. Guck dir mal diese Definition von Mix-ins an. Wie man so etwas einsetzt ist hier beschrieben, Mix-in Klassen sind hier beschrieben, Mix-in Module hier.sape hat geschrieben:Ja das meine ich doch. Das nennt man doch Mixins.
Tatsächlich werden in der Stdlib einige Mix-ins verwendet, wie zum Beispiel ForkingMixIn und ThreadingMixIn.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Wenn ich ein buntes (ha, UML!) Diagramm von Code haben will, das mich wie UML nur sehr bedingt weiterbringt, dann könnte ich mir auch http://www.tarind.com/depgraph.html genehmigen
Persönlich komme ich mit vernüftiger API-Doku sehr gut zurecht, um Programme und Pakete verstehen und benutzen zu können.
Persönlich komme ich mit vernüftiger API-Doku sehr gut zurecht, um Programme und Pakete verstehen und benutzen zu können.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ergo bringen es Klassendiagramme nicht wirklich, zumindest nicht in Python.Sumo hat geschrieben:Klassendiagramme zeigen aber keine Objektzustände an.Leonidas hat geschrieben:Zur Lautzeit werden sie aber verfügbar.
Andererseits kann ich mich nicht erinnern, wo ich in diesem Thread diese von dir zitierte Aussage gemacht habe.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice