EnTeQuAk hat geschrieben:
Aber eine Frage: Der link, sape, ist der jetzt ernst gemeint, das der auf die Quickreferenz von docutils zeigt?
Ja warum
ich benutze seit neustem auch reStructuredText für die Dokumentation der Klassen/Funktionen, etc. Aber eigentlich wollte ich auf
http://docutils.sourceforge.net/rst.html verweisen.
EnTeQuAk hat geschrieben:
Und das mit dem Defninieren der Atribute habe ich wiefolgt umgesetzt:
Code: Alles auswählen
class MainParser:
def __init__(self):
# define attributes
self.project_name = ''
self.project_path = ''
self.project_files = []
self.rendered_project_path = ''
# fill atributes with content ;)
self.set_project_name() # set self.project_name
self.set_project_path() # set self.project_path
self.set_project_files() # set self.project_files
self.set_rendered_project_path() # set self.rendered_project_path
Ich denke, das ist das, was ihr meintet oder?
Jepp, so mag ich das
Aber auch nur fast
Mach aus den ``setern`` gleich richtige ``geter`` so das du z.B. ``self.project_name = self.set_project_name()`` schreiben kannst
EnTeQuAk hat geschrieben:
Und ich muss sagen - so kann man sich eine sehr schöne Struktur aufbauen und sieht vorallem, was welches Atrubut für einen Typ hat.
Genau
Alles andere finde ich ein wenig unübersichtlich (
EDIT: Das hat für mich aber nichts damit zu tun das ich weiß welcher Typ das Attribut hat. Das wird bei mir ehe oben bei der Beschreibung angegeben.)
Leonidas hat geschrieben:sape hat geschrieben:(was übrigens 80% der Python programmiere nutzen um Privates (_) oder Protected (__)) zu signalisieren
Die 80% kann ich inbesondere bei __ schwer glauben. Hast du dafür Belege?
Da hast du mich falsch verstanden. Ich meinte damit nicht das die Pythonprogrammierer 80% der ganze zeit den Code mit _ und __ vermurksen, sondern das 80% der Python Programmierer mit einem _ am Anfang Signalisieren wollen das es Private ist und mit __ Protected. Ich benenne tatsächlich (großzügig geschätzt) ca. 10-20% vom den ganzen Methoden-/Klassen-/Attribut-/Funktionsdefinitionen. Ca. 80-90% der Definitionen fangen bei mir auch tatsächlich ohne _ und __ an. Und __ habe ich bisher noch gar nicht benutzt, da ich bisher keine Sachen brauchte die Protected sind.
...
Warum nutze ich private? Weil es unter Umständen sein kann, dass eine Methode länger wird (und zuviel auf einmal macht) und ich sie in mehrer in sich abgeschlossene Einheiten schreibe, die aber nur für die Hauptmethode(n), die diese verwenden, einen Sinn ergibt und außerhalb der Klasse nicht zu gebrauchen ist. Wenn dabei allgemein verwendbare Methoden rauskommen, kommt das ehe bei mir aus der Klasse raus und wandert in eine `util.py` Datei.
Ein anderer Grund kann sein, wie BlackJack gerade aufgezeigt hat, das es sich um Initialisierungsmethoden für Attribute einer Klasse handelt, die im Konstruktor verwendet werden. Dort finde ich das auch passend es mit einen _ beginne zu lassen.
Und mal ehrlich, ich finde bei Python fast nichts furchtbarer, als wenn ich Methoden/Attribute sehe, bei denen ich nicht unterscheiden kann, welche von außen zu benutzen sind und welche nur intern für die Klasse gedacht sind. Mir geht das da um die Übersichtlichkeiten und den "Workflow" der sich daraus ergibt.
Code: Alles auswählen
Wenn ich Attribute temporär an etwas anderes binde, damit alle Namen schon in der `__init__()` eingeführt werden, auch wenn das Attribut erst später einen sinnvollen Wert bekommt, nehme ich normalerweise `None`. Das fliegt einem dann meistens eher um die Ohren wenn man Fehler macht, als wenn man zum Beispiel eine leere Zeichenkette nimmt mit der dann fälschlicherweise weitergearbeitet wird, obwohl sie eigentlich vorher durch etwas sinnvolleres hätte ersetzt werden müssen.
Was spricht den dagegen gleich den richtigen Type zu verwenden wenn ehe klar ist wie der Zieltyp auszusehen ist?Wenn ich z.B. ein Attribut habe das sich ``self.html_code`` nennt, kann ich das doch gleich mit ``self.html_code = '' `` initialisieren, anstatt ``None`` zu benutzen. Es steht ja ehe für mich in vornherein fest das es ein ``str`` sein wird.