[python-users] String als Objektnamen verwenden

hunniger do_not_reply_to_this_address at t-online.de
Di Okt 30 18:15:52 CET 2007


Ich schließe mich Stefan an, insofern als dass die Benutzung von Strings 
für diesen
Zweck nicht zu empfehlen ist.
Dennoch gebe ich hier die Lösung des Problems unter Verwendung von 
Strings an:


class range:
    def __init__(self):
        self.value=23
    def setValue(self,x):
        self.value=x
    def getValue(self):
        return self.value

class boss:
    def __init__(self):
        self.a=range()
        self.b=range()
        self.b.setValue(42)
    def method(self,src,dest):
        exec(src+".setValue("+dest+".getValue())")
       
b=boss()

b.method("self.a","self.b")
print b.a.getValue()


Die Klass "range" Stellt die Gemeinsame Oberklasse der die Objekte
"despecle_tight_slider" und "despecle_thight_spin_ctr" (im Quelltext 
vereinfacht "a" und "b" gennant) dar. Die Klasse "boss" beherbergt die 
zu geforderte Methode.
Dirk


 und

> Versuch's mal mit getattr():
> getattr(self, 'despecle_tight_slider') # liefert die methode
> getattr(self, 'despecle_tight_slider')() # führt die aus
> http://docs.python.org/lib/built-in-funcs.html
>
> Falls möglich hantierst du idealerweise gar nicht erst mit Strings rum,
> sondern übergibst direkt die Methode (und nicht nur deren Name) als
> Parameter.
>
>   



Mehr Informationen über die Mailingliste python-users