OOP und eine eigene Klasse, Oh mein Gott

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

OOP und eine eigene Klasse, Oh mein Gott

Beitragvon reggid » Dienstag 29. Oktober 2002, 21:12

Also ich hab jetzt mit der Python OOP angefangen!
Jetzt habe ich eine Klasse:

Code: Alles auswählen

#! /usr/local/bin/python # Muss das hier eigentlich sein ?? Wenn ja wieso ?
import time

class now:
    def __init__(self):
        self.t=time.time() # t wird die zeit  übergeben
        self.storetime() #eine Methode wird erstellt
    def storetime(self):
        self.year, \ # Was bedeutet dieser \ ?
        self.month, \ # Das selbe
   def __str__(self): #Was bedeutet __str__
        return time.ctime(self.t)

So ich hoffe ihr könnt mir helfen
Gast

Re: OOP und eine eigene Klasse, Oh mein Gott

Beitragvon Gast » Dienstag 29. Oktober 2002, 22:17

Hallo!

reggid hat geschrieben:Also ich hab jetzt mit der Python OOP angefangen!
Jetzt habe ich eine Klasse:
[...]
So ich hoffe ihr könnt mir helfen

Zum #!:
Normal rufst Du das Script ja mit "python script.py<return>" auf. In bestimmten Umgebungen (z.B. Unix/Linux, WWW-Server) kann man das Script aber direkt aufrufen (lassen), also nur mit "script.py<return>" und dafür muss die Umgebung wissen, womit das Script gestartet werden soll.

Zum \:
storetime() ergibt so keinen Sinn. Da hast Du was unterschlagen. Ich nehme mal an, dass das komplett so aussieht:

Code: Alles auswählen

    def storetime(self):
        self.year,\
        self.month,\
        self.day,\
        self.hour,\
        self.minute,\
        self.second,\
        self.dow,\
        self.doy,\
        self.dst=time.localtime(self.t)

Eine Python-Anweisung endet überlicherweise mit einem Zeilenumbruch, d.h. alles von self.year bis time.localtime(self.t) müsste in eine Zeile stehen. Das wäre etwas unübersichlich. Deswegen ermöglicht das \ , eine Anweisung über mehrere Zeilen verteilen zu können.

Zu __str__():
Konkret: __str__() bestimmt, was ausgegeben wird, wenn Du ein Objekt dieser Klasse mit print aufrufst oder mit der built-in-Funktion str(),
stellt also die String-Repräsentation der Klasse da.
Allgemein die Bedeutung der __blabla__()-Funktionen hier zu erläutern, würde vielleicht etwas weit führen. Vielleicht steht dazu was in dem Buch, aus dem Du wohl den obigen Quellcode hast (Python in 24 Hours?).

Jan
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Dienstag 29. Oktober 2002, 22:18

Hi reggid,

na dann schaumermal :D

Code: Alles auswählen

#! /usr/local/bin/python # Muß nicht sein, erlaubt aber unter Unix/Linux das direkte Starten vom Script

Diese Kommentarzeile zeigt bei Unix/Linux... der Shell welcher Interpreter für dieses Script gestartet werden soll.

Code: Alles auswählen

class now:
    def __init__(self):
        self.t=time.time() # t wird die zeit  übergeben
        self.storetime() #eine Methode wird aufgerufen, nicht erstellt!

    def storetime(self): # hier wird die Methode erstellt!
        self.year, \ # dieser \ bedeutet, daß die Zeile hier eigentlich noch nicht zu ende ist.
        self.month, \ # diese Zeile gehört eigentlich noch zur oberen dazu
        ... # da scbeint noch was zu fehlen
        # man könnte das ganze auch so schreiben:
        # self.year, self.month, self.day, ... = time.localtime(self.t)

noch Fragen?


Gruß

Dookie
Benutzeravatar
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

Beitragvon reggid » Mittwoch 30. Oktober 2002, 18:31

Also das mit den \ hab ich jetz verstanden! Es sagt dem Interpreter die zeile geht da unten weiter ;)

Code: Alles auswählen

def storetime(self):
    self.year
    self.month
    self.day
    self.hour
    self.minute
    self.second
    self.dow
    self.doy
    self.dst=time.localtime(self.t)


Wieso schreibt man das nicht so dahin ?
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Beitragvon Voges » Mittwoch 30. Oktober 2002, 20:31

Hallo!
reggid hat geschrieben:Wieso schreibt man das nicht so dahin ?

Dann weiß der Interpreter nicht, dass die 9 Zeilen einer einzigen Anweisung entsprechen, sondern sieht sie als 9 einzelne Anweisungen an. Die ersten 8 sind ziemlich sinnfrei und self.dst=time.localtime(self.t) führt dazu, dass self.dst dann nicht das 9. Element des Tupels enthält, das localtime() zurückgibt, sondern das *gesamte* Tupel. Sind self.year bis self.doy vorher schonmal initialisert worden, gibt es nichtmal eine Exception.

Jan
reggidDerEinzige

WORN SIEHT MAN DEN DAS ES EINE TULPE IST ?

Beitragvon reggidDerEinzige » Mittwoch 30. Oktober 2002, 21:17

Hääää wie sieht man das das alles eine Tulpe ist oder sein soll ?

Ps: Hatte keine lust mich einzuloggen *g*
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Re: WORN SIEHT MAN DEN DAS ES EINE TULPE IST ?

Beitragvon Voges » Mittwoch 30. Oktober 2002, 22:55

reggidDerEinzige hat geschrieben:Hääää wie sieht man das das alles eine Tulpe ist oder sein soll ?

Dran schnuppern. Steht aber auch so in Dokumentation zu time.localtime().
bla = time.localtime()
Da time.localtime() ein Tupel zurück gibt, wird bla automatisch ein Tupel (bzw. zeigt auf ein Tupel), egal was bla vorher war. Wenn Du prüfen willst, ob bla ein Tupel ist, kannst Du z.B. folgendes machen:

Code: Alles auswählen

import types
if type(bla) is types.TupleType:
    print "bla ist ein Tupel"

Es gibt natürlich nicht nur TupleType, sondern auch StringType, FileType, ListType etc. pp.

Jan
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Mittwoch 30. Oktober 2002, 23:39

Lösen wir's doch mal auf

Code: Alles auswählen

   def storetime(self):
        self.year,\
        self.month,\
        self.day,\
        self.hour,\
        self.minute,\
        self.second,\
        self.dow,\
        self.doy,\
        self.dst=time.localtime(self.t)
wird von python so

Code: Alles auswählen

def storetime(self):
  # die folgenden Zeilen sollten alle in einer Zeile stehen.
  # Wenns mehr sind liegts am Browser oder an wem auch immer...
  self.year, self.month, self.day, self.hour, self.minute, self.second, self.dow, self.doy, self.dst=time.localtime(self.t)
interpretiert. Jetzt darf jeder selbst entscheiden, welche Screibweise Ihm lieber ist. Man sieht jedenfalls daran, dass das ein Tupel ist.

Für Linuxer die Shell programmieren, sollte der Backslash am Zeilenende doch kein Problem darstellen.

Hans

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder