Was bezeichnet ihr als Basics?
Was ich bisher beherrsche:
-Kontrollstrukturen
-Basisdatentypen
-Dateien
-Funktionen
-Modularisierung
-Schnittstelle zum Betriebssystem
Ich möchte gerne ein etwas größeres Projekt starten. Wüsste nur nicht was. :K
OOP - erste Fragen
Tja, was ist ein größeres Projekt? Vielleicht die visuelle Darstellung von irgendwelchen Daten. Also Datei mit Daten einlesen, Achsen zeichnen, beschriften, Daten plotten.
Oder ein Labyrinth anlegen und versuchen einen Weg hindurch zu finden - und zwar möglichst schnell.
Oder ein Textadventure.
Oder wenn Du an Logfiles kommst, analysiere diese (wie viel Traffic, wie viele Errors, etc.).
Da lässt sich beim üben schon einiges lernen. Wähle ein Thema, das Du gerne umsetzen möchtest und für Deine Kenntnisse nicht zu schwer ist. Du sollst ja Spaß daran haben. Aber solange Du nicht irgendeinen Kurs abarbeiten möchtest, brauchst Du die Idee schon selbst.
Oder ein Labyrinth anlegen und versuchen einen Weg hindurch zu finden - und zwar möglichst schnell.
Oder ein Textadventure.
Oder wenn Du an Logfiles kommst, analysiere diese (wie viel Traffic, wie viele Errors, etc.).
Da lässt sich beim üben schon einiges lernen. Wähle ein Thema, das Du gerne umsetzen möchtest und für Deine Kenntnisse nicht zu schwer ist. Du sollst ja Spaß daran haben. Aber solange Du nicht irgendeinen Kurs abarbeiten möchtest, brauchst Du die Idee schon selbst.
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
Ich interessiere mich sehr für Netzwerkprogrammierung. Vielleicht könnte ich einen kleinen Trojaner bauen, der bestimmte Sachen abfängt un an bestimmte Server schickt.
Oder ein Programm, dass Inhalte bestimmter Dateien auflistet. Registryinhalte (sprich Schlüssel) auflistet usw.
Textadventure wäre auch sehr spannend.
Oder ein Programm, dass Inhalte bestimmter Dateien auflistet. Registryinhalte (sprich Schlüssel) auflistet usw.
Textadventure wäre auch sehr spannend.
Das ist das Problem. Ich kann meine Kenntnisse nicht einschätzen. Denke aber schon, dass ich weitgehenst alles verstanen habe.as Du gerne umsetzen möchtest und für Deine Kenntnisse nicht zu schwer ist
Nun, dann beginne doch damit. einen einfachen Echo-Server mit passendem Client zu entwickeln. Zunächst reicht es, genau eine Verbindung zu aktzeptieren. Im weitern Verlauf entwickelst du den Server derart weiter, dass er mehrere Verbindungen (gleichzeitig) verarbeiten kann (Variante A: Mit Threads, Variante B: Non-Blocking IO).
Damit wärst Du bereits einige Abende beschäftigt und neue Erkenntnisse sind gewiss (erforderlich).
Grüße ... bwbg
Damit wärst Du bereits einige Abende beschäftigt und neue Erkenntnisse sind gewiss (erforderlich).
Grüße ... bwbg
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
OK werde mir die Sache annehmen. Vielen,vielen,vielen Dank! Kriegste ein virtuelles Bier geschenkt.
Wird also so eine Art ChatProgramm zum Schluss. Erst mal eine Verbindung, dann mit Threads arbeiten und dann umwandeln in ein Chatprogramm.
Wird also so eine Art ChatProgramm zum Schluss. Erst mal eine Verbindung, dann mit Threads arbeiten und dann umwandeln in ein Chatprogramm.
In der Python-Dokumentation gibt es das Socket Programming HOWTO. Ansonsten ist auch Literatur zu Socket-Programmierung in C nützlich, denn das `socket`-Modul in Python ist nur eine recht dünne Schicht über der BSD-Socket API die man üblicherweise von C aus verwendet.
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
Ui weißt Du ob das Galileo Computing Buch darüber ordentliche Infos liefert. Besprochen werden die Module: socket, ftplib,imaplib
Habe grad einen anderen Thread eröffnet, indem es um Kleinigkeiten geht, aber Kleinigkeiten sind Dinge, die mal zum späteren Zeitpunkt wichtig werden können.
Habe grad einen anderen Thread eröffnet, indem es um Kleinigkeiten geht, aber Kleinigkeiten sind Dinge, die mal zum späteren Zeitpunkt wichtig werden können.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Habe gerade das Kapitel zu sockets überflogen, aber wenn du einen Chat-Server machen willst, nutz doch das asynchat-Modul aus der Stdlib, das ist ziemlich brauchbar dafür.Gary123456 hat geschrieben:Ui weißt Du ob das Galileo Computing Buch darüber ordentliche Infos liefert. Besprochen werden die Module: socket, ftplib,imaplib
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
Da gibt es ja an die 70 Seiten rein über Netzwerkprogrammierung. Ich interessiere mich sehr für Netzwerke und werde mir alles durchlesen. Sprich auch alle Module ansehen. Ich denke aber, dass das jetzt abseits des eigentlichen Themas ist. Aber was solls. Es gibt aber sicher mehr Module üfr Netzwerke, als die, die im Buch beschrieben worden sind. Werde mir dazu alles ansehen. Auch das Themengebiet Threads werde ich mir genüsslich vor die Nase reiben. Hehe freu mich schon drauf.
Der Beitrag entwickelt sich zwar grad mehr in Richtung Netzwerke, ich hätte allerdings auch noch mal ein paar grundsätzliche Fragen zu OOP in Python. Ich konnte mit etwas Glück auch ohne Bon das "unfassbare Handbuch" zurückgeben und mach nun mit "OOP mit Python" von Weigend (ausgeliehen) weiter . Da ich OOP nur in Grundzügen von C her kenne verwunderte mich erstmal, dass Attribute public per default sind und sogar dynamisch erzeugt werden können. Der Autor schrieb das "Restriktionen in der Pythoncommunity generell verpönt" seien, aber andererseits Attribute wenn möglich immer private sein sollten? #
TNX
TNX
> (...(lambda...(it-schemes-i-must-be-jailed-in-braces? code)...))))))))))))))))))))))))))
#t
#t
@barrio: Du kennst OOP in Grundzügen von *C*? Nicht das mit C nicht auch OOP möglich ist, aber die Sprache selbst bietet dafür ja keine Unterstützung.
Attribute sollen nicht privat sein, sondern der Zustand eines Objekts sollte angemessen gekapselt sein. Kapselung ist nicht gleichzusetzen mit erzwungenem Zugriffsschutz. Es können auch Namenskonvention, Dokumentation, oder gesunder Menschenverstand verwendet werden.
Attribute sollen nicht privat sein, sondern der Zustand eines Objekts sollte angemessen gekapselt sein. Kapselung ist nicht gleichzusetzen mit erzwungenem Zugriffsschutz. Es können auch Namenskonvention, Dokumentation, oder gesunder Menschenverstand verwendet werden.
@barrio: Python ist offen, d.h. es sind stets alle Attribute zugänglich. Privat bedeutet in dieser Hinsicht, dass man sorgsam ist und in anderen Namensräumen nicht rumfummelt. Lesen ist kein Problem, aber beim setzen von Werten sollte man schon genau wissen was man tut. Gehe also nicht an fremde Attribute, es sei denn, diese sind explizit dafür vorgesehen.
Eine Warnung ist in dieser Hinsicht ein führender Unterstrich, quasi private per Konvention. Zwei führende Unterstriche werden zur Vermeidung von Namenskollisionen bei Vererbungshierarchien eingesetzt. Das brauchst Du nur selten und alle anderen Erklärungen sind falsch, egal in welchen Büchern sie auch stehen mögen.
Eine Warnung ist in dieser Hinsicht ein führender Unterstrich, quasi private per Konvention. Zwei führende Unterstriche werden zur Vermeidung von Namenskollisionen bei Vererbungshierarchien eingesetzt. Das brauchst Du nur selten und alle anderen Erklärungen sind falsch, egal in welchen Büchern sie auch stehen mögen.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nehmen wir mal an du meintest C++ statt C, dann ist es auch dort moeglich Zugriffsbeschraenkungen zu umgehen - sei es durch Pointer oder `#define private public`. Wenn man einmal anerkannt hat, dass es sinnvolle Gruende gibt Zugriffsschutz zu umgehen, stellt sich nur noch die Frage wie schwer man das machen will. Im Fall von Python ist die Grundeinstellung, dass man Entwicklern vertrauen kann, statt der Zwangsjackeneinstellung von C++ (oder Java). "we are all consenting adults here" faellt an der Stelle haeufiger.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@cofi Deine Behauptung, man könne die Zugriffsbeschränkungen umgehen, nicht zu halten, insbesondere nicht mit der von Dir wohl beabsichtigten Implikation, es wäre so einfach wie in Python oder Java, allgemein in dynamischen Sprachen.
Innerhalb des Standards lassen sich die Beschränkungen nicht mit Erfolgsgarantie umgehen. "#define private public" ist illegal, da der Standard nicht gestattet, Schlüsselwörter als Präprozessor-Makros zu definieren. Moderne Compiler geben beim Versuch mindestens eine Warnung aus. Man müsste auch sämtliche Klassen neu kompilieren, die von einer derartigen Definition betroffen sind, da sicher kein Compiler Binärkompatibilität zwischen privaten und öffentlichen Feldern garantiert.
Gleiches gilt für sämtliche Tricks mit Zeigern, die allesamt entweder undefiniertes Verhalten implizieren, oder sich auf das Binärlayout spezifischer Compiler verlassen.
Ich würde die Zugriffsbeschränkungen in C++ auch nicht unter dem Aspekt der Objektorientierung betrachten. Man kann darin viel besser Optionen zur Kontrolle der Binärschnittstelle einer Klasse sehen, und als solche sind diese Optionen in C++ auch ziemlich wichtig, da das binäre Layout von Objekten in C++ eine bedeutende Rolle spielt.
Innerhalb des Standards lassen sich die Beschränkungen nicht mit Erfolgsgarantie umgehen. "#define private public" ist illegal, da der Standard nicht gestattet, Schlüsselwörter als Präprozessor-Makros zu definieren. Moderne Compiler geben beim Versuch mindestens eine Warnung aus. Man müsste auch sämtliche Klassen neu kompilieren, die von einer derartigen Definition betroffen sind, da sicher kein Compiler Binärkompatibilität zwischen privaten und öffentlichen Feldern garantiert.
Gleiches gilt für sämtliche Tricks mit Zeigern, die allesamt entweder undefiniertes Verhalten implizieren, oder sich auf das Binärlayout spezifischer Compiler verlassen.
Ich würde die Zugriffsbeschränkungen in C++ auch nicht unter dem Aspekt der Objektorientierung betrachten. Man kann darin viel besser Optionen zur Kontrolle der Binärschnittstelle einer Klasse sehen, und als solche sind diese Optionen in C++ auch ziemlich wichtig, da das binäre Layout von Objekten in C++ eine bedeutende Rolle spielt.
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
Frage ist immer noch diesselbe:
":roll: Uuups entschuldige. Hier der Link: http://tutorial.pocoo.org/ Ich kann mir einfach nicht genau vorstellen, was ich unter diesen Begriffen verstehen soll. Ich habe diese 2 Seiten mind 5 mal durchgelesen und ich verstehe teilweise nur Bahnhof."Habe mir jetzt paar Seiten durchgelesen, nur verstehe ich nicht was Namensräume + Gültigkeitsbereiche genau sind. Das ist etwas kompliziert erklärt, finde ich. Wäre um eine simple Erklärung sehr dankbar!
Ein Gültigkeitsbereich gibt an, in welchem Bereich welche Variablen (bzw. Daten im Allgemeinen) verfügbar sind. Im Prinzip erzeugst du mit jeder Funktion einen Gültigkeitsbereich:
"spam" existiert hier num im Gültigkeitsbereich von "func", aber nicht im globalen Gültigkeitsbereich. Du kannst also nur von innerhalb der Funktion auf "spam" zugreifen. "ham" hingegen liegt im globalen Gültigkeitsraum und ist auch aus "func" (welches ebenefalls im globalen Raum liegt) erreichbar. Bei Python (und bei vielen anderen Sprachen auch), kannst du Gültigkeitsbereiche in einander verschachteln und aus dem inneren Bereich auf den äußeren zugreifen.
Namensräume sind im Prinzip sehr ähnlich zu Gültigkeitsbereichen: mit Namensräumen kannst du eine Hierachie von Namen aufbauen, auf die du dann (auch von außen) zugreifen kannst. In Python kannst du Namensräume mit Modulen und Klassen aufsannen:
"Spam" ist nun ein Namensraum, in dem sich der Name "ham" befindet. Von außen kannst du nun darauf mittels "Spam.ham" zugreifen. Das ganze kannst du natürlich beliebig verschachteln:
Damit hast du dann die Namensräume "Spam", "Ham" und "Eggs", welche alle ineinander verschachtelt sind.
Das ist natürlich alles nur sehr grob und oberflächlich beschrieben, für den Anfang sollte das aber reichen.
Code: Alles auswählen
def func():
spam = 42
ham = 23
Namensräume sind im Prinzip sehr ähnlich zu Gültigkeitsbereichen: mit Namensräumen kannst du eine Hierachie von Namen aufbauen, auf die du dann (auch von außen) zugreifen kannst. In Python kannst du Namensräume mit Modulen und Klassen aufsannen:
Code: Alles auswählen
class Spam(object):
def ham(self, ...):
....
Code: Alles auswählen
class Spam(object):
class Ham(object):
class Eggs(object):
def foo(self, ...):
...
Das ist natürlich alles nur sehr grob und oberflächlich beschrieben, für den Anfang sollte das aber reichen.
Das Leben ist wie ein Tennisball.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
In der Frage fehlt immernoch _was genau_ du nicht verstehst. EyDus Schrottflintenansatz mag helfen oder nicht, ist aber in jedem Fall fuer den Ersteller zeitaufwendig fuer dich aber nicht unbedingt zielfuehrend.Gary123456 hat geschrieben:Frage ist immer noch diesselbe: ":roll: Uuups entschuldige. Hier der Link: http://tutorial.pocoo.org/ Ich kann mir einfach nicht genau vorstellen, was ich unter diesen Begriffen verstehen soll. Ich habe diese 2 Seiten mind 5 mal durchgelesen und ich verstehe teilweise nur Bahnhof."
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Na, wenn die mal nicht nach hinten los geht...
@Gary: Ich werde das Gefühl nicht los, dass Du zuviel auf einmal willst. Als Tipp - geh es langsamer an, such Dir kleine Problemstellungen und Spielideen, die Du umsetzen möchtest. Dabei wirst Du Fehler machen, aus denen Du lernen kannst und Dir die Welt des Programmierens Schritt für Schritt erschliesst. Den ganzen paradigmatischen Überbau von Anfang an erfassen zu wollen, ist doch öde, da Du den Sinn dahinter höchstens vermuten kannst. Über den spielerischen Zugang macht die Sache Spaß, über den Nürnberger Trichter ohne gewisse Vorkenntnisse - nunja...
So hab ich lange Zeit glücklich ohne jedwede Kenntnis von OOP in Turbo Pascal vor mich hin programmiert (bis hin zu einem kleinen GUI-Toolkit), dann kam Delphi mit Object Pascal und ich dachte - pff, was soll das, diese Objektdinger mit Prozeduren dran brauche ich nicht. Es hat noch eine ganze Weile gedauert, bis ich erkannte, dass ich mit records und units was Vergleichbares gemacht hatte und dass es eigentlich toll ist, wenn einem die Sprache dabei entgegen kommt (Der darauffolgende Switch zu C war dann eher traumatisch für mich )
Das soll kein Plädoyer dafür sein, dass Du die Entwicklung der Programmiersprachen nachvollziehen musst, um die Konzepte dahinter zu verstehen. Mir gehts eher darum - lerne laufen, entdecke den Spass am Laufen - dann wird Fahrradfahren sehr viel leichter.
@Gary: Ich werde das Gefühl nicht los, dass Du zuviel auf einmal willst. Als Tipp - geh es langsamer an, such Dir kleine Problemstellungen und Spielideen, die Du umsetzen möchtest. Dabei wirst Du Fehler machen, aus denen Du lernen kannst und Dir die Welt des Programmierens Schritt für Schritt erschliesst. Den ganzen paradigmatischen Überbau von Anfang an erfassen zu wollen, ist doch öde, da Du den Sinn dahinter höchstens vermuten kannst. Über den spielerischen Zugang macht die Sache Spaß, über den Nürnberger Trichter ohne gewisse Vorkenntnisse - nunja...
So hab ich lange Zeit glücklich ohne jedwede Kenntnis von OOP in Turbo Pascal vor mich hin programmiert (bis hin zu einem kleinen GUI-Toolkit), dann kam Delphi mit Object Pascal und ich dachte - pff, was soll das, diese Objektdinger mit Prozeduren dran brauche ich nicht. Es hat noch eine ganze Weile gedauert, bis ich erkannte, dass ich mit records und units was Vergleichbares gemacht hatte und dass es eigentlich toll ist, wenn einem die Sprache dabei entgegen kommt (Der darauffolgende Switch zu C war dann eher traumatisch für mich )
Das soll kein Plädoyer dafür sein, dass Du die Entwicklung der Programmiersprachen nachvollziehen musst, um die Konzepte dahinter zu verstehen. Mir gehts eher darum - lerne laufen, entdecke den Spass am Laufen - dann wird Fahrradfahren sehr viel leichter.
-
- User
- Beiträge: 318
- Registriert: Dienstag 26. Februar 2013, 18:39
Naja, ich hatte schon etwas davor geproggt. Auch etwas größere Tools. Da mir diese Sprache zu "langweilig" wurde, bin ich nach Python umgestiegen. Durch "EyDu" habe ich das jetzt alles verstanden und bin richtig froh darüber.
Zu einer ganz anderen Sache:
Ich habe mir vorgenommen ein größeres Chatprogramm zu schreiben mit richtiger GUI. Nun weiß ich, dass das nicht in paar Wochen geht sondern habe mir ca. an die 9Monate vorgenommen. Dazu habe ich einen Partner gefunden, der mit mir diese Sache proggt. Klingen diese 9 Monate realistisch für Threads, Netzwerkprogrammierung, OOP und TKINTER? Oder ist das viel zu wenig? Innerhalb dieser 9 Monate will ich mit ihm rein planen und die Sache richtig angehen. Ich denke Planung ist das A und O für ein solch großes Projekt.
Wäre um Antwort sehr dankbar!
Zu einer ganz anderen Sache:
Ich habe mir vorgenommen ein größeres Chatprogramm zu schreiben mit richtiger GUI. Nun weiß ich, dass das nicht in paar Wochen geht sondern habe mir ca. an die 9Monate vorgenommen. Dazu habe ich einen Partner gefunden, der mit mir diese Sache proggt. Klingen diese 9 Monate realistisch für Threads, Netzwerkprogrammierung, OOP und TKINTER? Oder ist das viel zu wenig? Innerhalb dieser 9 Monate will ich mit ihm rein planen und die Sache richtig angehen. Ich denke Planung ist das A und O für ein solch großes Projekt.
Wäre um Antwort sehr dankbar!
@Gary123456: Das lässt sich schwer als Aussenstehender einschätzen. Es kommt ja darauf an wie schnell Du die Sachen lernst. Und auch auf Deinen Kollegen — lernt der gleich schnell, oder schneller und kann Dir was erklären, oder langsamer und hält damit auf…