property-Funktion mal nicht in Klassen verwenden

Hi, die meisten kennen wohl die property-Funktion aus Python, mit der man folgenden Code schreiben kann: # ----------------------------------------------------------- class Foo(object): @property def bar(self): return 1 foo = Foo() foo.bar # ----------------------------------------------------------- Ich habe mir jetzt die Frage gestellt, ob auch soetwas möglich wäre: # ----------------------------------------------------------- def bar2(self): return 42 bar = property(bar2) bar # ----------------------------------------------------------- Da ich hier frage, funktioniert der zweite Code natürlich nicht, es wird nur ein property-Objekt zurückgegeben. Gibt es da einen kleinen Trick, um das zweite Szenario (Methodenaufruf über Auslesen einer Variable) zu ermöglichen? Vielen Dank, fs

--On 8. April 2008 12:28:34 +0200 Felix Schwarz <felix.schwarz@web.de> wrote:
@property() ausserhalb einer new-stye Klasse macht überhaupt keinen Sinn (siehe die entsprechede Doku zu property()). Wenn Du irgendwas in Art braucht, dann bastel Dir eine entsprechende Klasse, die die Zuweisung kontrolliert. Andreas

Felix, dein Beispiel macht absolut keinen Sinn. Schau mal unter http://docs.python.org/ref/descriptors.html properties koennen mithilfe des descriptor protokolls implementiert werden. Lange Rede, kurzer Sinn: properties machen nur Sinn, wenn an irgendeiner Stelle auf ein attribut (via getattr z.B. oder ueber die Punktnotation) zugegriffen wird. Stephan Am Dienstag, 8. April 2008 12:28:34 schrieb Felix Schwarz:

Ich bin's nochmal. Ich nehme meine Aussage von vorhin zurueck. Was du willst macht schon Sinn. Man kann ein bisschen tricksen und z.B. folgendes machen: ---------------------------------------------------------- import sys class MyModule(object): @property def fourtytwo(self): return 42 sys.modules['MyModule'] = MyModule() import MyModule print MyModule.fourtytwo from MyModule import fourtytwo print fourtytwo -------------------------------------------------------- Allerdings muss man dann damit leben, dass man das modul als Klasse definiert und irgendwie in die sys.modules reinschmuggelt. Also nicht sehr elegant. Am Dienstag, 8. April 2008 12:28:34 schrieb Felix Schwarz:

--On 8. April 2008 12:28:34 +0200 Felix Schwarz <felix.schwarz@web.de> wrote:
@property() ausserhalb einer new-stye Klasse macht überhaupt keinen Sinn (siehe die entsprechede Doku zu property()). Wenn Du irgendwas in Art braucht, dann bastel Dir eine entsprechende Klasse, die die Zuweisung kontrolliert. Andreas

Felix, dein Beispiel macht absolut keinen Sinn. Schau mal unter http://docs.python.org/ref/descriptors.html properties koennen mithilfe des descriptor protokolls implementiert werden. Lange Rede, kurzer Sinn: properties machen nur Sinn, wenn an irgendeiner Stelle auf ein attribut (via getattr z.B. oder ueber die Punktnotation) zugegriffen wird. Stephan Am Dienstag, 8. April 2008 12:28:34 schrieb Felix Schwarz:

Ich bin's nochmal. Ich nehme meine Aussage von vorhin zurueck. Was du willst macht schon Sinn. Man kann ein bisschen tricksen und z.B. folgendes machen: ---------------------------------------------------------- import sys class MyModule(object): @property def fourtytwo(self): return 42 sys.modules['MyModule'] = MyModule() import MyModule print MyModule.fourtytwo from MyModule import fourtytwo print fourtytwo -------------------------------------------------------- Allerdings muss man dann damit leben, dass man das modul als Klasse definiert und irgendwie in die sys.modules reinschmuggelt. Also nicht sehr elegant. Am Dienstag, 8. April 2008 12:28:34 schrieb Felix Schwarz:
participants (5)
-
Andreas Jung
-
Christopher Arndt
-
Diez B. Roggisch
-
Felix Schwarz
-
Stephan Diehl