AW: AW: [Python-de] dynamisch Methoden aufrufen

Rainer Fischbach fischbach at ecs-gmbh.de
Don Nov 13 10:49:53 CET 2003


-----Ursprüngliche Nachricht-----
Von: Ulrich Berning [mailto:ulrich.berning at t-online.de] 
Gesendet: Mittwoch, 12. November 2003 23:38
An: Rainer Fischbach
Cc: Markus Jais; python-de at python.net
Betreff: Re: AW: [Python-de] dynamisch Methoden aufrufen

> Damit fällt die Vererbung dann unter den Tisch, da die Methoden der 
> Superklassen nicht im __dict__ einer Klasse auftauchen. Dies gilt auch für:
>
> getattr(c, name)(c)
>
> Folgendes wird funktionieren:
>
> getattr(C, name)(c)
>
> besser wäre:
>
> getattr(c.__class__, name)(c)

getattr(c, name)(c) funktioniert nicht deshalb nicht, weil getattr die Methode aus der Oberklasse nicht finden würde, sondern weil das die gebundene Methode liefert, die keine Ausprägung mehr als Parameter nimmt. 

Natürlich ist klar, dass getattr der einzig zuverlässige Weg ist, um unter Berücksichtigung der Vererbung dynamisch eine Methode zu finden - egal ob die gebundene aus der Ausprägung oder die ungebundene aus der Klasse, die man am sichersten über c.__class__ bekommt. Der Weg über __dict__ ist nur sinnvoll, wenn man genau weiß, um welche Klassen es geht und was dort genau definiert. Alles andere würde nur darauf hinauslaufen, getattr noch einmal zu schreiben.

Sl, Rainer


Rainer Fischbach

Senior Consultant
ECS Engineering Consulting & Solutions GmbH
Mühlstraße 3
D-92318 Neumarkt

Fon +49 9181 4764-84 
Fax  +49 9181 4764-50
email fischbach at ecs-gmbh.de
http://www.ecs-international.de/