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.
"methode_innen" kannst du in "methode_aussen" einfach durch Aufruf verwenden. Ansonsten musst du, wenn du nicht tricksen willst, methode_innen zurückgeben und dann so damit etwas anfangen. Schau dir mal typische Dekoratoren an, da wird sowas oft verwendet.
Aber da man hier einer Funktion Eigenschaften verleiht, die sie so nie haben sollte, ist das eigentlich abzulehnen. Bei Klassenmethoden ist es in etwa das gleiche, nur das du gesondert self noch mit self=self übergeben müsstest.
@andilar: Das geht nicht, weil `methode_innen()` gar nicht existiert bis `methode_aussen()` aufgerufen wird. Und es wird auch bei jedem Aufruf von `methode_aussen()` eine *neues* Funktionsobjekt erstellt. ``def`` ist eine ausführbare Anweisung.
Warum gehen die beiden Varianten nicht, die Du selber gezeigt hast? Was für ein Problem versuchst Du da zu lösen?
Wenn Du etwas "wie Methoden einer Klassen" haben möchtest, dann verwende doch einfach Methoden einer Klasse.
Zuletzt geändert von BlackJack am Dienstag 21. Oktober 2008, 11:58, insgesamt 1-mal geändert.
Das kann man auch schon von innerhalb der Funktion ``f`` machen, da besteht kein Grund warum man ``_f`` erst zurückgeben müsste um das Attribut von außen zu setzen.
Aber ich gebe zu - sowas ist seltsam und irgendwie auch sinnlos. Closures zurückgeben kann andererseits manchmal nützlich sein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
snafu hat geschrieben:Welchen Grund hat es eigentlich, dass du Funktionen in Funktionen stecken willst?
Die Geschichte wäre sehr lang... im Grunde kann man sagen das irgendwo in einer Datei eine bestimmte Syntax zu einem Ergebnis führen soll.
Das ist eine Anforderung die es zu erfüllen gilt:
Der Teil meinZaubermodul ist aber schon eine Klasse, da das Objekt an andere Stelle übergeben werden muss.
Natürlich weiss ich das wenn in einer Anforderung steht (oder einem gesagt wird) das die Syntax soundso aussehen soll... Vielleicht schreibe ich doch besser eine Scriptsprache für die Scriptsprache.
Leonidas hat geschrieben:Dann lass doch ``lese_wert`` eine Klasse zurückgeben, die die Methode ``ist_wert_gleich`` besitzt.
Hmm, dann müste ich in der Methode leseWert ein Objekt einer Klasse erstellen die unter anderem den gelesenen Wert mitbringt sowie eine Methode ist_wert_gleich?
Hört sich nach Licht im Tunnel an...
Dein Objekt "class_b" würde dann einfach die Eigenschaften und Funktionen von "class_a" übernehmen und eigene Funktionalität hinzufügen können. Und dieser Packen könnte wiederum an "class_c" übergeben werden usw. Befasse dich am besten mal mit dem Vererben von Klassen. Dann müsstest du verstehen, was ich meine.
@andilar: Ich habe den Eindruck Du versuchst in einer anderen Sprache als Python zu programmieren. Dafür ist Python IMHO nicht gut geeignet, weil DSLs sich letztendlich der Python-Syntax und -Semantik unterwerfen müssen und man nur bis zu einem gewissen Grad eine andere Syntax und Semantik vortäuschen kann. Im Endeffekt wäre es sicher einfacher die Anforderungen zu ändern und einfach Python in Python zu programmieren, oder tatsächlich eine eigene DSL zu implementieren.
Dein Objekt "class_b" würde dann einfach die Eigenschaften und Funktionen von "class_a" übernehmen und eigene Funktionalität hinzufügen können. Und dieser Packen könnte wiederum an "class_c" übergeben werden usw. Befasse dich am besten mal mit dem Vererben von Klassen. Dann müsstest du verstehen, was ich meine.
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:
andilar hat geschrieben:Der Teil meinZaubermodul ist aber schon eine Klasse, da das Objekt an andere Stelle übergeben werden muss.
Warunm "aber"? Eine Klasse ist in Python genau so ein Objekt wie der Rückgabewert einer Funktion. "Aber" impliziert für mich so ein bißchen, dass du darin gewisse Nachteile siehst. Nenn doch mal deine Befürchtungen und dann wird dir sicher erklärt, inwiefern sie berechtigt sind.
BlackJack hat geschrieben:@andilar: Ich habe den Eindruck Du versuchst in einer anderen Sprache als Python zu programmieren. Dafür ist Python IMHO nicht gut geeignet, weil DSLs sich letztendlich der Python-Syntax und -Semantik unterwerfen müssen und man nur bis zu einem gewissen Grad eine andere Syntax und Semantik vortäuschen kann. Im Endeffekt wäre es sicher einfacher die Anforderungen zu ändern und einfach Python in Python zu programmieren, oder tatsächlich eine eigene DSL zu implementieren.
DSL = domain specific language
Das ist ganz meine Rede, man sollte wenn man python benutzt, auch python und die OO wie angedacht benutzen. Vielleicht hätte es aber noch eine Möglichkeit gegeben die mir als python noob verschlossen ist, daher die Fragen.
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
Ansonsten reden wir wahrscheinlich aneinander vorbei.
EDIT: Um Missverständnissen vorzubeugen: Ich setze bei diesem Vergleich sein Szenario voraus, dass sozusagen Unterfunktionen anderer Objekte aufgerufen werden sollen und wollte sagen, dass man selbiges mit Vererbung erreichen kann.
Zuletzt geändert von snafu am Dienstag 21. Oktober 2008, 13:00, insgesamt 1-mal geändert.
@snafu: Nein das ist nicht das selbe. Keiner der drei Aufrufe hat im ersten Beispiel ein Argument, im zweiten Übergibst Du plötzlich bei zwei Aufrufen etwas.
@andilar: Ich wollte eigentlich damit sagen, dass das was Du da mit Python versuchst höchstwahrscheinlich "unpythonisch" ist, auch wenn Du es mit OOP entsprechend hin biegst. Denn anscheinend beschreiben Deine Anforderungen wie etwas syntaktisch aus zu sehen hat. Das ist IMHO etwas merkwürdig.
BlackJack hat geschrieben:@snafu: Nein das ist nicht das selbe. Keiner der drei Aufrufe hat im ersten Beispiel ein Argument, im zweiten Übergibst Du plötzlich bei zwei Aufrufen etwas.
Darum ging's mir nicht. Sein "Zaubermodul" soll doch bestimmten Code aus einer anderen Datei lesen und dann in Python-Syntax übersetzen, oder nicht? Dann wäre die Syntax aus der fremden Datei (bei mir Code 1) doch mit der Python-Syntax aus meinem Code 2 erreichbar. Denn er möchte - zumindest habe ich das bisher so verstanden - letztlich eine Vererbung erreichen, die aber durch seine fremde Datei anders ausgedrückt wird.
Ich beziehe mich hier übrigens auf:
im Grunde kann man sagen das irgendwo in einer Datei eine bestimmte Syntax zu einem Ergebnis führen soll.
Das hat er zumindest noch vor circa einer Stunde gesagt.