Kann Thread keine Variablen übergeben

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
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Kann Thread keine Variablen übergeben

Beitragvon hehejo » Donnerstag 18. August 2005, 10:45

Warum bekomme ich diesen Fehler?
Ich gebe meinem Thread doch die Variable mit?!

Code: Alles auswählen

>>> from threading import Thread, Event
>>> class t(Thread):
            def __init__(self, event):
               super(Thread) # nützt auch nichts
               self.event = event
            def run(self):
               self.event.wait(15)
               print 'ich darf'

>>> e = Event()
>>> a = t(e)
>>> a.start()

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in -toplevel-
    a.start()
AssertionError: Thread.__init__() not called
>>>
Gruß, Johannes
ascii stupid question,
get stupid ansii

http://www.hehejo.de
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 11:08

So sollte es gehen:

Code: Alles auswählen

>>> from threading import Thread, Event
>>> class t(Thread):
            def __init__(self, event):
               self.event = event
               Thread.__init__(self)
            def run(self):
               self.event.wait(15)
               print 'ich darf'

>>> e = Event()
>>> a = t(e)
>>> a.start()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Donnerstag 18. August 2005, 11:35

vielen Dank.

Hab grad in der Hilfe nachgelesen, was super wirklich macht.
Aber den Sinn des Beispieles verstehe ich wirklich nicht:

Code: Alles auswählen

class C(B):
    def meth(self, arg):
        super(C, self).meth(arg)
Gruß, Johannes

ascii stupid question,
get stupid ansii


http://www.hehejo.de
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

super()

Beitragvon henning » Donnerstag 18. August 2005, 12:23

Ich auch nicht so richtig, darum verwende ich es grundsätzlich nicht.
Ich find die Grundidee von super() zwar klasse,
aber in der momentanen Umsetzung trägt es (wie dieses Beispiel gut zeigt) sehr viel mehr zur Verwirrung bei als dass es etwas nützt.
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Donnerstag 18. August 2005, 12:30

Ich hab ja noch nicht mal so ganz verstanden wozu das gut ist.
Gruß, Johannes

ascii stupid question,
get stupid ansii


http://www.hehejo.de
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Donnerstag 18. August 2005, 12:54

Ganz sicher bin ich auch nicht...
<rate_funktion_von_super>
aber ich glaube dass super dir eine Instanz
von deiner Vater-Klasse zurückgibt, die sich dann aber irgendwie mit
der Insanz deiner Klasse überschneidet.

Also in deinem Beispiel halt ein Objekt der Klasse B, so dass
das .meth(arg) halt wirklich meth aus B aufruft, aber sich das natürlich trotzdem noch auf dein Objekt bezieht, sonst würde das Ganze ja keinen Sinn machen. (Deswegen muss man wohl auch self übergeben)
</rate_funktion_von_super>

Was ich noch in Erinnerung behalten habe war, dass super wohl irgendwie nur Sinn macht, wenn alle Parent-Klassen das auch verwenden, aber wenn sie das tun, dann MUSST du super nutzen.
Irgendwo im Netz gabs da nen schönen Text zu.
Die Schlußfolgerung war aber so ungefähr, das super()direkt aus der Hölle kommt und davon bin ich inzwischen auch überzeugt. ,-)

edit:
Habs gefunden: http://fuhm.org/super-harmful/
Benutzeravatar
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

Beitragvon hehejo » Donnerstag 18. August 2005, 13:24

Vielen Dank.

Zitat von der Seite:
you must remember that super does not call your superclass
Das sollte ich mir mal aufschreiben.
Gruß, Johannes

ascii stupid question,
get stupid ansii


http://www.hehejo.de
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Donnerstag 18. August 2005, 13:45

Ui mir fällt gerade auf, dass meine Liebligssprache Dylan da sogar erwähnt wird :-)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder