ProjectPlan

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hey Python Freunde,

Ich habe ein neues Programm gebastelt was euch bei euren Projekten behielflich sein könnte.
Da ich ein wenig in Eile bin kann ich hier nicht so viel darüber erzählen.

Besucht einfach den Link: https://github.com/Jonas18175/ProjectPlan
Da findet ihr auch eine ausführliche Beschreibung.

Die Programmversion ist noch im development-status.
Nächte woche werde ich die Erste release rausbringen.

jtschoch
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hmm... Du bist ja nun schon länger hier im Forum aktiv, da frage ich mich bei dem Code leider, wie wenig bei Dir augenscheinlich hängen geblieben ist.

Grundsätzlich scheinst Du Dir ja schon Mühe gegeben zu haben, aber alleine die Namen zeigen, dass Du PEP8 immer noch nicht verinnerlicht hast. Daran solltest Du *dringend* arbeiten; speziell wenn Du nach Mitstreitern suchst, wie auf Github beschrieben.

Zufällig stach mir das hier ins Auge:

Code: Alles auswählen

class ClassRegister(Enum):
    """This registered all classes"""

#...
    
    def hasInstanz(self, name):
        try:
            self[name]
            return True
        except KeyError:
            return False
Das ist doch furchtbar umständlich! Für das Prüfen, ob ein Schlüssel in einem Dictionary enthalten ist kann man den ``in`` Operator benutzen:

Code: Alles auswählen

class Foo:
    def has_key(self, key):
        return key in self.__dict__

f = Foo()

f.has_key("foo")
False

f.__dict__["foo"] = 42

f.has_key("foo")
True
Dazu kommt auch hier der Name... klassisches Denglisch! ``hasInstanz``... wenn schon ``hatInstanz`` oder ``hasInstance``. Dazu ist die Formatierung eher Javaesque; in Python gilt bei Funktionen und Methoden lower_case_with_underscore, in diesem Falle also ``has_instance``.

Das sind zwar Kleinigkeiten, aber ich denke das zieht sich durch das gesamte Projekt. Daran solltest Du wirklich arbeiten.

Dein selbst gebauter ORM ist auch eher... naja - von Transaktionen sehe ich da z.B. nichts. Ebenfall ist mir unklar wo sich das "API-System für SQL-Server Anbindung" befindet. Ich sehe da nur Code für SQLite.

Wenn Du schon viel abstrahieren willst und wohl Wert auf den Support verschiedener DBMS legst, würde ich Dir einfach SQLAlchemy ans Herz legen, ehrlich! Das spart am Ende Arbeit, auch wenn Du Dich zunächst darin einarbeiten musst.

Das hier riecht auch eher nach Java:

Code: Alles auswählen

    #@Override
    def createTable(self):
        pass
In Python ist es eigentlich Konvention, in einer zu überschreibenden Methode eine Exception auszulösen:

Code: Alles auswählen

    def createTable(self):
        raise NotImplementedError("Please implement 'createTable'")
Mir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.

Generell würde auch erwarten, dass *mehr* und *genauere* Infos auf der Projektseite verfügbar sind, die das Projekt beschreiben. Unter einem Bug-Tracker kann man sich sicherlich etwas vorstellen, aber ein paar Features sollte man schon erwähnen. Evtl. auch, was Deine Software von Bugzilla, Track, Mantis usw. abhebt. Last but not least helfen Screenshots durchaus das Interesse bei einem potenziellen Nutzer oder gar Mitstreiter zu wecken.

Außerdem musst Du an der Dokumentation arbeiten; es muss ja nicht nur reine API Doku sein, aber aktuell ist da im Grunde genommen nichts, was mir zeigt, wie ich Code oder auch das Programm verwenden soll.

Bevor ich einen solchen Schnellschuss ("Ich habe das Programm in 3 Tagen zusammengeschrieben, ...") veröffentliche (oder publik mache), würde ich doch an diesen Punkten arbeiten ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hallo Hyperion,

du hast da was überlesen, da steht kommende Favorites.
Vielen Dank das du mich auf diese Dingen hingewiesen hast, ich werde dran Arbeiten.
Die Github Version desm Projektes ist ja auch noch nicht fertig.

Und wie meinst du das?
Mir fehlt irgend wie auch ein Domain-Layer. Evtl. könnte man den Datenbank-Teil als solchen ansehen, aber so eine enge Kopplung an die Persistenzschicht ist imho eher unschön, wenn man (später?) Domänenlogik implementiert.
Das mit den "in" wusste ich, aber ich habe es dort wieder mal vergessen :?

PEP8
Function names should be lowercase, with words separated by underscores as necessary to improve readability.

mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
Darf ich nicht mal meinen Stiel beibehalten?

Und zu Java, ja ich habe es ein wenig in Java-Style gemacht.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

jtschoch hat geschrieben:Darf ich nicht mal meinen Stiel beibehalten?
Deinen Stiel darfst Du behalten, aber Deinen Stil solltest Du anpassen ... :wink:
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

jtschoch hat geschrieben: PEP8
Function names should be lowercase, with words separated by underscores as necessary to improve readability.

mixedCase is allowed only in contexts where that's already the prevailing style (e.g. threading.py), to retain backwards compatibility.
Darf ich nicht mal meinen Stiel beibehalten?
Das bezieht sich ausschliesslich auf Code der vor PEP8 geschrieben wurde.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@jtschoch: unter »Enum« habe ich mir bisher immer etwas anderes vorgestellt. Aber in der Klasse wird auch Dein Stilmix deutlich. Standard-Python-Schreibweise und Deine spezielle Schreibweise nebeneinander. Übrigens: Was ist der Unterschied zwischen »has_key« und »compareKey« (außer dass zweiteres deutlich langsamer und umständlicher geschrieben ist)?
Antworten