unbound method .. first argument .. (got nothing instead)

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
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Hallo zusammen,

Da ich schon länger nichts mehr mit python gemacht habe, wend ich mich direkt an euch. Ich vermute, daß mein Problem durch eine Kleinigkeit verursacht ist, die jemandem, der sich täglich mit python beschäftigt, sofort (oder schneller als mir) auffalen müßte.

Ich hatte ein längeres Programm geschrieben, und soweit klappt alles ganz gut, doch eine Methode will mir der compiler nicht genehmigen. Ich hab mehrere ähnliche Methoden in meinem Code, und an den anderen (genau so definiert) hat er nichts auszusetzen, nur an dieser:

Code: Alles auswählen

def end_simulation(self):
   '''Ask if back-ups needed'''

   Control.check_abortedrun(self)

   user = raw_input('if status files of the actual run not needed, you can delete them by pressing "d", to continue without deleting press "Enter"')
   if user == 'd':
      files = glob.glob(str(tempfile.gettempdir()) + '/OLD.*')
      print files
      for item in files:
         os.system('rm -r' + item)
      print 'Backups deleted'
   else:
      print 'Files are to find in ' + tempfile.gettempdir()
# end of end_simulation
################
Da bekomm ich die altbekannte Meldung 'unbound method end_simulation() must be called with Class instance as first argument (got nothing instead)' Ich hab sie sehr oft gesehen, meistens hatte ich das (self) beim Definieren der Methode vergessen. Doch diesmal finde ich nichts, was ich noch korrigieren könnte.

Ich hoffe ihr könnt mir weiterhelfen, ziemlich nervig so was ..

Viele Grüße,
ivka_sto

P.S. Und, ja, ich habe die Forum-Einträge durchsucht, doch das hat mich auch nicht weitergebracht :(
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Es liegt nicht an der Methodendefinition, sondern daran, wie du die Methode aufrufst:

Code: Alles auswählen

>>> class A():
...     def f(self): pass
...
>>> A.f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method f() must be called with A instance as first argument (got nothing instead)
Loesung: Erzeuge eine Instanz deiner Klasse und rufe dadrauf die Methode auf:

Code: Alles auswählen

>>> a = A()
>>> a.f()
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Vielen, vielen Dank :)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Oder benutze `classmethod', wenn du tatsächlich auf der Klasse operieren willst.
lunar

"os.system('rm -r ' + item)" ist nicht dein Ernst, oder? :shock:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Also ich hätte gleich "rm -fr * &" genommen.
Keine Störungen durch irgendwelche Meldungen, keine lästigen Wartezeiten ... :D
Antworten