was mich auch schon lange interessiert...

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
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

Code: Alles auswählen

print shop
ja nicht der megaufwand, ich habe aber in meinen skripten ziemlich oft die anweisung

Code: Alles auswählen

print irgendeineseite
da habe ich mir mal überlegt bzw. auch schon vergeblich probiert, das irgendwie in der klassdefinition festzulegen.

mfg

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

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
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:

Code: Alles auswählen

super(self, AktuelleKlasse).__init__(*args, **kw)
ich meine das *args und **kw, das zweite erlaubt das übergeben einer liste von parametern, oder?
und das erste?

mfg

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

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
Gast

hi dookie!

danke für die auffrischung!

mfg

rolgal
Antworten