Simples OOP

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 16. Oktober 2007, 21:00

Wenn PEP 8 eine Instanz einer Subklasse von Chuck Norris wäre, hätte sie jetzt einige Roundhouse-Kicks verteilt! ;)

Leute, Leerzeilen! Nach und zwischen Imports, ebenso zwischen Funktions-/Methodendefinitionen usw. usf.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. Oktober 2007, 22:03

Imperator hat geschrieben:Diese Sachen mit den Variablen, sind deshalb so, weil ich das Programm von vornherein darauf ausgelegt habe, es mal weiterzuentwickeln. aber auf den Style-Guide pfeif ich.
Also du postest ein Beispielprogram welches bewusst gegen gängige Konventionen verstößt? Halte ich für eher nicht optimal.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Dienstag 16. Oktober 2007, 22:15

Mhm... Ein gutes OOP Beispeil wäre eher gewesen, wenn du "Mensch" tatsächlich als Objekt gesehen hättest. Du betrachtest jedoch eher eine Aktion als Objekt... Böser Pseudogedankencode, der kein Python ist sondern nur'ne Überlegung!!!!:

Code: Alles auswählen

class Mensch:
    def __init__(self, name, geburtsjahr, groesse):
        self.name = name
        self.geburtsjahr = geburtsjahr
        self.groesse = groesse

    def verlieben(self, menschinstanz):
        self.verliebt = menschinstanz

    @property
    def alter(self):
        return momentanes_jahr - self.geburtsjahr

marcell = Mensch('Marcell', 1989, 175)
randomfrau = Mensch('frau', 1990, 156)
marcell.verlieben(randomfrau)
print marcell.verliebt.name #Für den Namen von der Frau... und sowas...
Ich weise nochmal darauf hin, dass das kein valides Python ist oder sowas, sondern nur dämlicher Pseudocode!! Aber hier kristallisiert sich halt heraus, was'n Objekt überhaupt darstellt. Ihr könnt mich gerne berichtigen, wenn irgendas idiotisch ist... (Außerdem find ich es doof, dass man sich zufällig verliebt x3)
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Dienstag 16. Oktober 2007, 22:34

@PEP8: Naja, ich halte mich zum größten Teil auch daran, aber nur weil es meinem eigenen Stil entspricht. Ich mag halt ``name_mit_unterstrichen`` und CamelCase für Klassen und vieles mehr. Ansonsten würde ich mich nicht daran halten ;)

Was ich eigentlich sagen will ist, was mir am meisten an der **Deutschen** Python Community negativ aufstößt ist die allgemeine Versessenheit auf PEP8 und den Zen. Als ob man es mit religiösen Spinnern zu tun hat ;) Nicht falsch verstehen aber einige hier sind so dermaßen darauf versessen das es mit einer Sekte zu vergleiche ist :!: Schade eigentlich...

Da finde ich die Ruby Community um einiges angenehmer :) Weniger religöse Spinner...

Versucht es erstmal nicht in den falschen hals zu bekommen (Auch wenn es schwer ist) sonder seht es mal so:
1. wenn eine Gemeinschaft an einem Programm arbeitet sind Styleguids oberste Pflicht um ein konsistentes Erscheinungsbild zu hinterlassen (=clean)!! Ob man sich da nun an PEP8 richtet oder selber was ausarbeitet ist sowas von irrelevant[1] . Wichtig ist, das man sich auf einen gemeinsamen Stil geeinigt hat!

2. Die meisten hier sind doch eher Hoby-Programmierer die Python für sich entdeckt haben um alltägliche Probleme zu lösen oder gar die Lösungen dafür mit Python zu automatisieren. Wenn dann einer hier fragt was er bei seiner Lösung falsch gemacht hat, finde ich es total daneben ihn immer und wider auf PEP8 und Zen hinzuweisen. Das ist nicht nur penetrant und arrogant sondern auch lästig ;) Denn er will ja gerne einen Denkanstoß/Lösung für sein Problem und nicht über Stylguids debattieren und sich für **seinen** Stil rechtfertigen. Tut nicht not oder?


[1]: Klar, jetzt könnte ihr damit ankommen und sagen das die Regeln in PEP8 sich allgemein bewährt haben und man sich daran halten muss/sollte. Dan kommen ich euch mit einer menge Gegenargumente und genug belegen in den gezeigt wird das auch ganz andere Styleguids funktionieren; auch durchaus für Python ;)


P.S.: Nur mal so als Denkanstoß.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Dienstag 16. Oktober 2007, 23:02

Der Sinn von PEP8 ist nicht nur, Code lesbar und logisch zu machen, denn das kriegen viele andere Styleguides auch schon hin. Der Sinn ist einfach Einheitlichkeit. Bei C++, Ruby, Perl und Java sieht man oft, wie die Leute ihr eigens Süppchen kocht, man muss sich in jeden Quelltext logisch und strukturell reindenken. Bei den meisten größeren Sachen in Python wird PEP8 als Grundstruktur genommen, was zu einem sehr schnellen Verständnis führt.
BlackJack

Dienstag 16. Oktober 2007, 23:42

Ich gehöre wohl zu den religiösen Fanatikern. Ich mache die Leute regelmässig drauf aufmerksam. Einige Empfehlungen sind, wie ich ja schon geschrieben habe, Geschmackssache, aber im Grunde sind die dazu da um die Kommunikation zu vereinfachen. Namen in reinen Grossbuchstaben für Konstanten zu verwenden ist sprachübergreifend so weit verbreitet, dass es einfach sehr verwirrt wenn sich solche Variablen plötzlich verändern.

Oder die maximal 80 Zeichen pro Zeile: In meinem Browser führen sehr lange Zeilen zu einem horizontalen Scrollbalken und auch die Absätze im Fliesstext in den Beiträgen werden dann auf die volle Breite formatiert. Das ist einfach superanstrengend zu lesen.

Klar, wenn man etwas für sich selbst entwickelt, kann man schreiben wie man möchte, aber wenn das dann hier zur Diskussion oder eine Frage gestellt wird, dann wäre es schon gut wenn man einen gemeinsamen Nenner hat.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Mittwoch 17. Oktober 2007, 06:29

poker hat geschrieben:die allgemeine Versessenheit auf PEP8 und den Zen
Hallo poker!

Wäre da nicht der Zen, und dass sich so viele wie möglich an den Styleguide halten, wäre Python nicht halb so viel wert. Python besteht aus der Sprache selber und aus der Einstellung der Programmierer, die sie benutzen.

Es ist einfach so, dass viele Tipps aus PEP8 einen Sinn haben. Es ist einfach so, dass man Code besser lesen kann, wenn man anhand der Schreibung von Objektnamen darauf schließen kann mit was man es zu tun hat. -- Und jetzt der wichtigste Zusatz: "ohne dass man bei jedem Programm umdenken muss." Am Schlimmsten sind dabei die Sternchenimporte aus Bequemlichkeit. Die machen Code, bei excessivem Gebrauch, für Außenstehende fast unlesbar.

Lieber ein paar Zeilen mehr und dafür selbsterklärenden und gut lesbaren Code. (Leider halten es manche Leute für "Cool", so viel Arbeitsschritte wie möglich in einer Zeile Code zu verpacken.)

----

Andere darauf aufmerksam zu machen, dass Code lesbarer und durchschaubarer wird, wenn man sich großteils an PEP8 hält -- ist gut für uns alle und nicht einfach eine Spinnerei.

PEP8 gehört zu Python dazu wie die Einrückung nach ``if``.

mfg
Gerold
:-)

PS: Könnte mal jemand PEP8 auf deutsch übersetzen? Und hier ins Board stellen?
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 17. Oktober 2007, 09:08

Ja, ich bin Verfechter der PEP 8, und das aus gutem Grund. Die oft nachgesagte deutsche Gründlichkeit ist nur einer davon.

Es kann mir doch niemand erzählen, ein bisschen Übersicht im Quelltext wäre zuviel verlangt, Mehraufwand, das Ergebnis nicht wert oder was auch immer. Wenn man schon zwischen logischen Einheiten keine Leerzeilen zur Strukturierung macht, dann ist man selbst für Python noch sowas von zu faul ;)

Weisheit: Code wird einmal geschrieben, aber sehr oft gelesen.

Gerade wenn hier noch Beispielcode präsentiert wird, aus dem andere lernen sollen, dann sollte man es a) sauber tun, damit sie auch verstehen, worauf es ankommt und wie es gedacht ist und b) sollte man mit gutem Beispiel vorangehen, um nicht als Multiplikator für schlecht lesbaren Code zu fungieren. Denn irgendwann muss man das möglicherweise mal ausbaden ;)

Sauber zu programmieren ist in meinen Augen eine Selbstverständlichkeit! Dass das viele nicht so sehen ist traurig, aber Realität. Trotzdem mache ich das für andere und für mich selbst, weil ich meinen Code *sehr* oft lese, um ihn zu optimieren. Für veröffentlichte Dinge gilt das noch einmal mehr.

Es geht hier nicht rein um die PEP 8, sondern um ganz grundlegende Dinge, die irgendwo sogar mit Disziplin (ok, da bin ich manchmal nicht unbedingt das Vorbild ;)) sowie Respekt vor sich und anderen zu tun haben. Die PEP 8 ist nur ein guter, akzeptierter Konsens, der die Welt ein kleines Stückchen besser macht :)

Generell sind Code Conventions eine schöne Sache, nur leider in anderen Communities (allen voran PHP) nicht verbreitet, bekannt oder einfach weitgehend nicht-existent.

Blablabla, you geht the point. Wenn man schon merkwürdigen Code schreibt, dann aber bitte sauber ;)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 17. Oktober 2007, 13:35

Mir geht es da ganz ähnlich wie meinen Vorrednern, ich bin auch ein Befürworter des PEP8. Weißt du, was ich mit Codesnippets mache, die nicht dem PEP8 enstprechen? Als erstes schreibe ich sie (sofern das zeitlich von der länge vertretbar ist) in PEP8-konformen Code. Dann stört mich der Stil nicht mehr und ich kann mich dem Inhalt des Codes widmen.

Was dieses von Y0Gi angedeutete Codebeispiel angeht, so sieht man das genau an den Tkinter-Leuten, die sich ihre Tutorials durchlesen und einfach Module per *-Import reinziehen, weil sie es nicht besser wissen. Und dabei hat diese Art des Imports ja bekanntlich mehr als genug Nachteile um sie schlichtweg nicht zu nutzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
tiax
User
Beiträge: 152
Registriert: Samstag 23. Juli 2005, 17:28
Kontaktdaten:

Mittwoch 17. Oktober 2007, 17:27

Bei TKinter hab ichs immer drauf geschoben, dass mir das "alt" vorkam (keine Ahnung obs das auch ist), schlimm fand ich das allerdings bei SQLAlchemy, da waren sehr viele Dokumentationen und Einführungen mit

Code: Alles auswählen

from sqlalchemy import *
wenn man sich bei einer Programmiersprache aber sowieso an Regeln halten muss (Syntax und so weiter), kann man sich doch auch gleich an so Dinge wie PEP8 halten.
Ne invoces expellere non possis
[url=xmpp://florian@florianheinle.de]xmpp:florian@florianheinle.de[/url]
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Donnerstag 18. Oktober 2007, 20:31

poker hat geschrieben:2. Die meisten hier sind doch eher Hoby-Programmierer die Python für sich entdeckt haben um alltägliche Probleme zu lösen oder gar die Lösungen dafür mit Python zu automatisieren. Wenn dann einer hier fragt was er bei seiner Lösung falsch gemacht hat, finde ich es total daneben ihn immer und wider auf PEP8 und Zen hinzuweisen. Das ist nicht nur penetrant und arrogant sondern auch lästig ;) Denn er will ja gerne einen Denkanstoß/Lösung für sein Problem und nicht über Stylguids debattieren und sich für **seinen** Stil rechtfertigen. Tut nicht not oder?
Du hast IMHO einen wichtigen Punkt vergessen:
Ich wurde auch schon einige male auf PEP-8 aufmerksam gemacht worden (ich bin letztendlich froh drüber, aber das sei mal dahingestellt) und das nachdem ich eine Frage zu einem "Programm" gestellt hatte.
Allerdings wurde in den Postings(meist von BlackJack, Leonidas, Gerold oder sonstigen sehr aktiven Mitgliedern) nicht nur auf Pep-8 hingewiesen. Im Gegenteil: Es wurde eine Zeile bzw ein Satz geschrieben, ich solle mir doch mal Pep-8 durchlesen.
Nach diesem Tipp/Bitte o.ä. wurden mir jedesmal einige sehr hilfreiche Tipps gegeben.
Und das finde ich kommt in deinem Posting nicht ganz so rüber, sondern eher, dass nur gesagt wird(mal ganz grob allgemein ausgedrückt - nicht falsch verstehen!): "Dein Code ist nicht PEP-8 konform, der ist schlecht, den les ich nicht".
Sowas habe ich noch nie gelesen und ich denke, das wurde auch nie (zumindest von "fähigen" Mitgliedern) geschrieben.
LG Tobsl
Antworten