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

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
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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

Ich hab ja noch nicht mal so ganz verstanden wozu das gut ist.
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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

Vielen Dank.

Zitat von der Seite:
you must remember that super does not call your superclass
Das sollte ich mir mal aufschreiben.
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

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