funktionen "by name" ansprechen

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.
hobbes_dmS
User
Beiträge: 11
Registriert: Mittwoch 18. April 2007, 13:15

funktionen "by name" ansprechen

Beitragvon hobbes_dmS » Montag 29. Oktober 2007, 10:40

moin,
kann man eine funktion "by name" ansprechen (z.B. so wie bei einer Instanzvariable?)

Beispiel:

Code: Alles auswählen

class A:
   def __init__(self):
      self.a = "hallo"

   def somefunc(self, text):
      print "doing", text

mit

Code: Alles auswählen

a = A()

und

Code: Alles auswählen

a.__dict__['a']

komme ich an das "hallo".

kann ich ähnlich auch an die funktion kommen?
ich stell mir das ungefähr so vor:

Code: Alles auswählen

a.__func__['somefunc']('important stuff')

und die Ausgabe wäre "doing imporant stuff"
(wobei "__func__" natürlich wild erfunden ist)

geht das irgendwie?

thx im Voraus
hobbes

PS:
über

Code: Alles auswählen

dir(A)

bekomme ich
['__doc__', '__init__', '__module__', 'somefunc']

über

Code: Alles auswählen

dir(a)

nur noch
['__doc__', '__init__', '__module__', 'a']

und bei

Code: Alles auswählen

dir(a.__class__)

erhalte ich
['__doc__', '__init__', '__module__']

da taucht "somefunc" leider nicht mehr auf... sonst wäre ich über

Code: Alles auswählen

a.__class__.__dict__['somefunc']

gegangen.

edit:
aaargh, geht ja doch... und zwar so:
a.__class__.__dict__['somefunc'](a, 'important stuff')

geht das auch direkter??
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Montag 29. Oktober 2007, 10:46

Code: Alles auswählen

f = getattr(a, somefunc)
f("bla")
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Beitragvon Zap » Montag 29. Oktober 2007, 11:05

Korrigiert und als vollständiges Beispiel:

Code: Alles auswählen

In [1]: class A(object):
   ...:     def somefunc(self, arg):
   ...:         print arg
   ...:
   ...:

In [2]: a = A()

In [3]: f = getattr(a, "somefunc")

In [4]: f("bla")
bla
hobbes_dmS
User
Beiträge: 11
Registriert: Mittwoch 18. April 2007, 13:15

Beitragvon hobbes_dmS » Montag 29. Oktober 2007, 11:10

Vielen Dank!
funktioniert einwandfrei.
Jona
User
Beiträge: 94
Registriert: Sonntag 23. September 2007, 23:25

Beitragvon Jona » Montag 29. Oktober 2007, 11:26

hilfreich ist dabei auch hasattr() sonst bekommst du einen attributeerror falls die methode nicht existiert.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder