Seite 1 von 1

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

Verfasst: Dienstag 4. November 2008, 16:43
von ivka_sto
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 :(

Verfasst: Dienstag 4. November 2008, 17:12
von Rebecca
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()

Verfasst: Mittwoch 5. November 2008, 13:18
von ivka_sto
Vielen, vielen Dank :)

Verfasst: Mittwoch 5. November 2008, 14:45
von cofi
Oder benutze `classmethod', wenn du tatsächlich auf der Klasse operieren willst.

Verfasst: Mittwoch 5. November 2008, 21:05
von lunar
"os.system('rm -r ' + item)" ist nicht dein Ernst, oder? :shock:

Verfasst: Mittwoch 5. November 2008, 21:51
von numerix
Also ich hätte gleich "rm -fr * &" genommen.
Keine Störungen durch irgendwelche Meldungen, keine lästigen Wartezeiten ... :D