Seite 1 von 3

OOP - erste Fragen

Verfasst: Mittwoch 6. März 2013, 15:33
von Gary123456
Hallo,

Code: Alles auswählen

import os
import sys

class Ordner:
    def PIDPython(self):
        self.PID=os.getpid()
        return self.PID
    def Rechte(self,Pfad,mode):
        self.Rechte=os.chmod(Pfad,mode)
        return self.Rechte
    def Listen(self,Pfad):
        self.Listen=os.listdir(Pfad)
        return self.Listen
1. Stimmt dieser Code?
2. Wenn ja, ist mir self nicht ganz genau klar, was das sein soll. Im Buch wird das spärlich erklärt
3. Welches Onlinetutorial empfehlt ihr mir fürs OOP?

Immer diese Gerüchte, dass OOP so schwierig sei, stimmen wohl nich. Für mich erscheint das immer noch babyleicht :)

Re: OOP - erste Fragen

Verfasst: Mittwoch 6. März 2013, 16:01
von /me
Gary123456 hat geschrieben:Immer diese Gerüchte, dass OOP so schwierig sei, stimmen wohl nich. Für mich erscheint das immer noch babyleicht :)
Es ist nicht schwierig. Allerdings muss man die Ideen und Konzepte dahinter verstehen und korrekt anwenden und das hast du noch nicht.

Der Code ist so nicht korrekt. Als erstes stellt sich die Frage, warum man diese Funktionen überhaupt in einer Klasse bündeln sollte. Im Endeffekt haben sie keine gemeinsamen Daten die sie verwenden.

self ist übrigens das Exemplar (die Instanz) der Klasse mit der die Methode aufgerufen wird. Beim Aufruf selber wird sie nicht angegeben.

Schauen wir uns jetzt mal den Code an.

Code: Alles auswählen

    def Listen(self,Pfad):
        self.Listen=os.listdir(Pfad)
        return self.Listen
Hast du deinen Code eigentlich mal ausprobiert? Anscheinend nicht. Das ist jetzt nämlich ein schönes Beispiel dafür wie man sich selber in den Fuß schießen kann. Innerhalb der Methode Listen definierst du Listen neu als Liste. Damit ist die Methode Listen nicht mehr erreichbar.

Code: Alles auswählen

folder = Ordner()
print(folder.Listen('.'))
print(folder.Listen('.'))
Beim zweiten Aufruf bekommst du einen Fehler.

Code: Alles auswählen

TypeError: 'list' object is not callable
Der Grund sollte klar sein. Wenn du mal vor jedem print noch eine Zeile mit

Code: Alles auswählen

print(type(folder.Listen))
einfügst, dann siehst du es auch. Zuerst ist folder.Listen <type 'instancemethod'>, danach <type 'list'>.


Zum Schluss darf dann auch der Hinweis auf PEP-8, den Style Guide for Python Code, nicht fehlen. Es steht dir selbstverständlich frei zu schreiben wie du möchtest, aber wenn du Code mit anderen austauschst - oder anderen zum Drüberschauen vorlegst - dann hat es deutliche Vorteile wenn du dich an den allgemein verwendeten Stil hältst.

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 08:31
von bwbg
Aus der Sicht eines Hobbyisten: Du fängst an, OOP zu verstehen, wenn Du weißt, wann Du darauf verzichten sollst.

Die meisten Bücher und Tutorials, die ich bisher gesehen habe, beschreiben sehr gut, wie man Klassen definiert und verwendet (Lieblinge wie Fahrzeuge, Konten, Tiere. etc.). Was mir bisher jedoch immer gefehlt hat, war eine Art Leitlinie oder Kanon, wann man Klassen einsetzt oder eben gerade nicht.

Vielleicht hat hier jemand was passendes parat?

Grüße ... bwbg

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 09:42
von kbr
bwbg hat geschrieben:Was mir bisher jedoch immer gefehlt hat, war eine Art Leitlinie oder Kanon, wann man Klassen einsetzt oder eben gerade nicht.
Z.B.: Wenn Du feststellst, dass Methoden einer Klasse nicht zwingend Instanz-Variablen (Attribute) anwenden - sich also Informationen teilen oder einen Status merken müssen, dann kannst Du diese auch als Funktionen implementieren. Sobald Du aber feststellst, dass Du bei dem Einsatz von Funktionen globals brauchst, dann solltest Du Klassen einsetzten. Das ist aber nur eine Teilantwort, denn es gilt immer noch: OOP lernt man am besten, indem man jemanden zuschaut, der es kann.

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 16:57
von Gary123456
Naja bei mir ist es unsicher. Viele hier sagen, dass in der neuesten Ausgabe von dem Galileo Computing Python Buch nur Dreck verzählt wird. Nun - was soll ich machen? Anderes Tutorial? Bis jetzt hat mir eig alles gefallen (außer das es kleinere Fehler gibt)

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 17:10
von BlackJack
@Gary123456: Die Frage ist ja nicht ob es Dir gefällt, sondern ob idiomatisches Python gelehrt wird. Vielleicht gefällt Dir OOP ja auch auch wie es dort im Buch beschrieben wird. Das macht es nicht besser.

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 20:07
von Gary123456
Ouh Missverständnis. Ich habe gedacht, da wird falsches Zeug vermittelt.

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 20:21
von BlackJack
@Gary123456: Wird es ja auch.

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 20:24
von Gary123456
Was denn zum Beispiel?

Re: OOP - erste Fragen

Verfasst: Donnerstag 7. März 2013, 21:16
von cofi
Zum Destruktor: Die Angaben zum Destruktor sind grob fahrlaessig und vermitteln, dass man den benutzen kann. Der Umstand, dass das nicht oft getan wird, wird mit "in Python braucht man nicht selbst saubermachen" weggebuegelt. Dass ein Destruktor u.U. Probleme verursachen kann, die noch dazu mit "obskuren" Fehlermeldungen garniert sind wird komplett weggelassen.

Danach geht es weiter mit der Idee, dass es in Python Zugriffskontrolle ala C++ und Java gaebe, der Verbreitung von Gettern und Settern ...

BlackJack hat das vor einiger Zeit mal zusammengefasst: http://blog.marc.rintsch.de/2012/11/18/ ... nbook.html

Auch wenn du AFAIR das Python3 Buch nutzt, habe ich keine grossen Hoffnungen dass die Autoren es besser machen (es ist dasselbe Autorenpaar).

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 18:11
von Gary123456
OK Danke - werde ich mir zu Herzen nehmen.

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 18:48
von Gary123456
Gefält euch das besser: http://www.python-kurs.eu/klassen.php ?

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 18:58
von Sirius3
@Gary123456: die Seite http://www.python-kurs.eu/klassen.php wiederholt den gleichen Quatsch wie das Galileo-Buch.
Die Einführung hat nichts mit Python zu tun, sondern passt besser zu einer Java-Klasssen-Einführung.
Es hält sich nicht an PEP8, behauptet, es wäre schlecht auf Attribute direkt zuzugreifen und erfindet private Attribute.
Destruktoren werden wirklich von 99.9% der Python-Programmierer nie und vom Rest fast nie gebraucht.
Warum dann in einer Einführung überhaupt erwähnen, zumal die korrekte Benutzung äußerst kompliziert ist?

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 19:04
von Gary123456
Da ich nicht sehe, dass ihr mir schon ein Buch empfohlen hättet, eine Frage: Gibt es speziell für OOP ein Tutorial frei zugänglich im Internet.

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 20:44
von nezzcarth
Gary123456 hat geschrieben:Da ich nicht sehe, dass ihr mir schon ein Buch empfohlen hättet, eine Frage: Gibt es speziell für OOP ein Tutorial frei zugänglich im Internet.
Speziell zur Objektorientierung in Python 3 gibt es etwa http://www.packtpub.com/python-3-object ... mming/book
Das ist aber nicht umsonst.

Re: OOP - erste Fragen

Verfasst: Freitag 8. März 2013, 21:12
von Gary123456
Ich will was kostenloses. Ich geb nicht wieder Geld aus für ein Buch.

Re: OOP - erste Fragen

Verfasst: Samstag 9. März 2013, 09:38
von Sr4l
Ich denke du kannst ruhig OOP mit Hilfe von Python Das Umfassende Handbuch verstehen lernen. Ich habe das Buch nicht gelesen, hier ist BlackJacks Buchkritik (Link) das könntest du mal lesen.

Ich habe Python fast ausschließlich anhand des Python Tutorials gelernt, ich weiß nicht ob dir das hilft. Hier ist eine Übersetzung die cofi hier aus dem Forum betreut: Link.

mfG

Re: OOP - erste Fragen

Verfasst: Samstag 9. März 2013, 10:34
von Gary123456
Sehr gut! Vielen Dank! Nun - aus einem anderen Forum wurde mir dieses Buch deutlichst empfohlen. Hier eher nicht. Dann ist die Frage: Waren die 40 Euro umsonst?

Re: OOP - erste Fragen

Verfasst: Samstag 9. März 2013, 11:12
von lunar
@Gary123456 Ich würde sagen, ja, die 40 € waren umsonst. Was Dir dieses Buch beibringt, das kannst Du auch genauso gut aus frei im Internet verfügbaren Quellen erlernen. In welchem Forum wurde Dir dieses Buch denn sogar „deutlichst“ empfohlen?

Eine gute Quelle ist Learn Python The Hard Way, welches im letzten Teil auch objektorientierte Programmierung lehrt. Der Ansatz dieses Buchs ist ungewöhnlich, da es sehr viel Wert auf Übung legt, doch da man Programmierung vor allem durch Üben lernt, ist es sehr empfehlenswert.

Re: OOP - erste Fragen

Verfasst: Samstag 9. März 2013, 11:18
von Gary123456
Hier wurde es mir empfohlen: http://www.computerbase.de/forum/showth ... ?t=1179468

Die Frage ist ja, ob dieses umfassende Handbuch nur in OOP sinnloses Zeug vermittelt oder auch an anderen Stellen?

Werde mir das Buch "Learn Python on the hard way" mal ansehen.