Hey, ich habe schon über all danach gesucht und wurde leider nicht fündig. Deshalb versuche ich es mal hier.
Folgendes will ich realisieren: ein Script das eine Webseite aufruft und anhand der Daten auf der Webseite Berechnungen vor nimmt und dann wiederum bestimmte Aktionen auf der Seite ausführt.
Doch welche Struktur sollte ich dabei verwenden um den Überblick nicht zu verlieren?
main.py - Hauptprogramm
site.py - Verbindet sich, ruft Seiten auf und extrahiert Daten
aktionen.py - bekommt Daten von site.py und wertet diese aus
Ist das richtig so?
Ich will mit Klassen arbeiten, also müsste ich aktionen.py ja von site.py erben lassen. Mir würde auch reichen wenn ihr irgendwelche Links habt bei denen auf die Thematik eingegangen wird.
Frage bezüglich Aufbau/Struktur von Script
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Willkommen im Forum und zu Python!
Ich nehme mal an du kommst von Java, denn das macht alles im Pythonkontext keinen Sinn.
Ein Modul entspricht keiner Klasse und damit kann ein Modul auch nicht von anderen Erben.
Zu deinem konkreten Problem: Ich sehe da kein Problem warum das nicht alles in einem Modul stehen koennte. "aktionen" muss auch nicht von "site" erben, denn du schreibst ja schon dass du die Daten uebergeben willst. Eine Aktion ist auch keine Website also macht so eine Vererbung auch semantisch keinen Sinn (Vererbung ist eine "ist-ein" Beziehung, ein "Opel Astra" ist ein "Auto" etc.).
Zu guter Letzt: Du *willst* nicht mit Klassen arbeiten. Klassen sind ein Sprachmittel mit dem man bestimmte Probleme gut loesen kann, aber von vorneherein zu sagen "Ich benutze einfach immer eine Klasse" funktioniert nicht.
Ich nehme mal an du kommst von Java, denn das macht alles im Pythonkontext keinen Sinn.
Ein Modul entspricht keiner Klasse und damit kann ein Modul auch nicht von anderen Erben.
Zu deinem konkreten Problem: Ich sehe da kein Problem warum das nicht alles in einem Modul stehen koennte. "aktionen" muss auch nicht von "site" erben, denn du schreibst ja schon dass du die Daten uebergeben willst. Eine Aktion ist auch keine Website also macht so eine Vererbung auch semantisch keinen Sinn (Vererbung ist eine "ist-ein" Beziehung, ein "Opel Astra" ist ein "Auto" etc.).
Zu guter Letzt: Du *willst* nicht mit Klassen arbeiten. Klassen sind ein Sprachmittel mit dem man bestimmte Probleme gut loesen kann, aber von vorneherein zu sagen "Ich benutze einfach immer eine Klasse" funktioniert nicht.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- noisefloor
- User
- Beiträge: 3882
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Hast du mal ein konkretes Beispiel?
Gruß, noisefloor
Die Frage ist auch ein bisschen pauschal - "Berechnungen" oder "Aktionen" kann ja auch nur eine Zeile Code sein...Folgendes will ich realisieren: ein Script das eine Webseite aufruft und anhand der Daten auf der Webseite Berechnungen vor nimmt und dann wiederum bestimmte Aktionen auf der Seite ausführt.
Doch welche Struktur sollte ich dabei verwenden um den Überblick nicht zu verlieren?
Hast du mal ein konkretes Beispiel?
Gruß, noisefloor
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Abgretrennte Offtopic Diskussion: http://www.python-forum.de/viewtopic.php?f=5&t=37471
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
ich hätte halt gerne die Aktionen mit urllib2 gertrennt von den Aktionen mit regex die den html auslesen und als dritte Komponente den logischen Code.
Mal ein ganz grobes Beispiel:
site=Seitenklasse
parser=Parserklasse
site(user,pass) # meldet sich an und ruft daten vom ucp ab
ucpData = parser.getUcp(site.ucpSource) # daten in eine dictionarie mit regex
if ucpData.user = "test:
pass
Aber wie gesagt wenn ihr irgendwelche Links kennt wo darauf mehr eingegangen wird, dann hilft mir das schon da ich mich einfach rein lese. Bei der Literatur die ich hatte wurde darauf halt leider nicht eingegangenen. Vielen dank schon mal für die Antworten.
Mal ein ganz grobes Beispiel:
site=Seitenklasse
parser=Parserklasse
site(user,pass) # meldet sich an und ruft daten vom ucp ab
ucpData = parser.getUcp(site.ucpSource) # daten in eine dictionarie mit regex
if ucpData.user = "test:
pass
Aber wie gesagt wenn ihr irgendwelche Links kennt wo darauf mehr eingegangen wird, dann hilft mir das schon da ich mich einfach rein lese. Bei der Literatur die ich hatte wurde darauf halt leider nicht eingegangenen. Vielen dank schon mal für die Antworten.
@SphaeroX: Du machst Dir zu viele Gedanken und ich habe auch das Gefühl zu hast jetzt schon Klassen im Kopf ohne zu wissen ob die wirklich Sinn machen. Das soll nicht heissen das am Ende nicht hier und da sinnvoll Klassen eingesetzt werden können, aber Python ist nicht klassenfixiert wie beispielsweise Java wo man Klassen schreiben muss, auch wenn man gar keine Klassen schreibt sondern nur Funktionen gezwungenermassen syntaktisch in eine Klasse pressen muss. Und die Datei ist nicht gleichbedeutend mit einer Klasse, das heisst die Datei ist als Modul dazu da *mehrere* Funktionen und Klassen zu einer Einheit zusammenzufassen.
Fang doch einfach erst einmal mit einem Modul an. Wenn das dann tatsächlich anfängt zu gross zu werden kann man das immer noch problemlos in ein Package umwandeln und die Funktionen und vielleicht auch Klassen auf zwei oder mehr Module in dem Package aufteilen.
Package ist auf jeden Fall ein wichtiges Stichwort wenn man etwas schreibt das aus mehr als einem Modul besteht.
Fang doch einfach erst einmal mit einem Modul an. Wenn das dann tatsächlich anfängt zu gross zu werden kann man das immer noch problemlos in ein Package umwandeln und die Funktionen und vielleicht auch Klassen auf zwei oder mehr Module in dem Package aufteilen.
Package ist auf jeden Fall ein wichtiges Stichwort wenn man etwas schreibt das aus mehr als einem Modul besteht.
@SphaeroX: Ach so und *wirklich* wichtig: HTML nicht mit regulären Ausdrücken verarbeiten sondern eine passende Parserbibliothek verwenden. `lxml.html` oder BeautifulSoup beispielsweise.
Statt `urllib`/`urllib2` würde ich das `requests`-Package für den HTTP-Teil verwenden. Eine wesentlich angenehmere API und die gleiche für Python 2 und 3.
Statt `urllib`/`urllib2` würde ich das `requests`-Package für den HTTP-Teil verwenden. Eine wesentlich angenehmere API und die gleiche für Python 2 und 3.