Seite 2 von 2
Verfasst: Dienstag 21. Oktober 2008, 13:26
von andilar
Also ich weiß das das alles etwas verwirrend ist, aber im Grunde wurde meine Frage beantwortet.
Das ich bestimmte Sachen anders erreichen kann ist mir durch die diversen Ausführungen klar, aber es ging um
die ganz bestimmte
eine Art von
Syntax und da diese nicht simpel zu erreichen ist, hat sich das ganze gelöst. Sorry.
Trotzdem vielen Dank für die Antworten.

Verfasst: Dienstag 21. Oktober 2008, 13:28
von andilar
BlackJack hat geschrieben:Denn anscheinend beschreiben Deine Anforderungen wie etwas syntaktisch aus zu sehen hat. Das ist IMHO etwas merkwürdig.
Ja ist es... vielleicht wäre es pythonisch gewesen, das war was ich versucht habe herauszufinden.
Verfasst: Dienstag 21. Oktober 2008, 14:55
von Leonidas
andilar hat geschrieben:Also OO ist mir schon im Groben geläufig, aber die Syntax sollte ja ähnlich dem class_a().class_b().class_c() sein und das geht sinnvoller Weise nicht:
Das geht deswegen nicht, weil bei dir die Instanzen der Klasse ``class_a`` kein Attribut ``class_b`` hat und die Instanz von ``class_b`` kein Attribut ``class_c`` hat.
Bei dir hat eben das Modul die Attribute ``class_a/b/c``.
Verfasst: Mittwoch 22. Oktober 2008, 08:45
von sma
Das Code-Objekt der inneren Funktion wird in der Liste der Konstanten der äußeren Funktion gespeichert - man weiß nur nicht mit Sicherheit, wo. Dazu muss man AFAIK den Bytecode der äußeren Funktion (steht ebenfalls im Code-Objekt) analysieren. In folgendem einfach Fall weiß ich den Index:
Code: Alles auswählen
def a():
def b():
return 1
return 2
print eval(a.func_code.co_consts[1])
Stefan
Verfasst: Mittwoch 22. Oktober 2008, 11:31
von str1442
Sowas meinte ich auf Seite 1 mit "tricksen". Da greift man auf Funktions Interna die afaik nur fürs Debugging (zb Modul inspect) gedacht sind. Und das man den Index des Code Objektes kennt ist auch nur so, weil hier sieht, wo die innere Funktion definiert wird. Das führt zu magic numbering und dergleichen. Das so ziemlich einzige Funktions-Interna, das ich, wenns wirklich sein müsste, benutzen würde, wäre f.func_globals - das ist noch einigermaßen kontrollierbar.