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.
Antworten
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

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

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
reggid
User
Beiträge: 120
Registriert: Dienstag 8. Oktober 2002, 19:04
Wohnort: Dinslaken
Kontaktdaten:

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

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

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

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
Antworten