Seite 1 von 1
was mich auch schon lange interessiert...
Verfasst: Sonntag 18. April 2004, 21:16
von Gast
hallo zusammen!
kann man eigentlich eine klasse so definieren, dass im falle der instanzierung die betreffenden objekte sofort gedruckt werden, also print entfallen kann,
bsp:
Code: Alles auswählen
#!/usr/local/bin/python
from webtools import *
from seiten import ShopSeite
shop=ShopSeite()
print shop
nun ist die eine anweisung
ja nicht der megaufwand, ich habe aber in meinen skripten ziemlich oft die anweisung
da habe ich mir mal überlegt bzw. auch schon vergeblich probiert, das irgendwie in der klassdefinition festzulegen.
mfg
rolgal
Verfasst: Sonntag 18. April 2004, 22:34
von Dookie
Hi rolgal,
das sollte doch in __init__ gehen, einfach print self als letzte Anweisung. Das kann auch in der Basisklasse geschehen, wenn sichergestellt ist, daß dann super(self, AktuelleKlasse).__init__(*args, **kw) immer die letzte Anweisung in den __init__(...) Methoden der abgeleiteten Klassen ist.
Gruß
Dookie
Verfasst: Sonntag 18. April 2004, 22:52
von Gast
hi dookie !
seltsam, es geht, ging aber in meiner ersten version des moduls seiten nicht, das weiss ich noch genau.
danke einstweilen.
ach ja, wie war das nochmal mit dem hier:
ich meine das *args und **kw, das zweite erlaubt das übergeben einer liste von parametern, oder?
und das erste?
mfg
rolgal
Verfasst: Sonntag 18. April 2004, 23:26
von Dookie
Hi rolgal,
*args erlaubt beliebig viele Parameter als Tuple/Liste, die als Tuple bearbeitet werden können.
**kw erlaubt beliebig viele Keywordargumente, die als Dictionary bearbeitet werden können.
Also args ist ein Tuple mit den übergebenen Parametern ohne Namen, und kw ein Dictionary mit den Parametern die als (p1=1, p2="zwei") übergeben wurden, das schaut in dem Beispiel dann so aus {"p1":1, "p2":"zwei"}
Statt *args, **kw nimmst Du halt die Parameter, die __init__ der Basisklasse erwartet.
super funktioniert aber nur mit New-style Klassen, das werde ich im anderen Thread auch noch erläutern. Solange Du die Old-style Klassen verwendest nimm einfach Basisklasse.__init__(self, argumenteliste)
Gruß
Dookie
Verfasst: Dienstag 20. April 2004, 11:17
von Gast
hi dookie!
danke für die auffrischung!
mfg
rolgal