Seite 1 von 1
Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 13:18
von g123
Hallo Leute,
habe bisher noch nicht objektorientiert programmiert und relativ neu auf dem Gebiet.
Ist es erlaubt bzw. gängig eine Funktion innerhalb einer Methode zu erstellen?
Re: Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 13:28
von __deets__
Was meinst du damit? So etwas hier?
Code: Alles auswählen
class ...
def meine_methode(self, ...):
def lokale_funktion(...):
...
Wenn ja: das geht. Ob das gaengig ist, ist eine andere Frage, die viel mit Geschmack zu tun hat. Ich mache so etwas.
Re: Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 13:47
von kbr
Das ist tatsächlich viel Geschmacksache. Ich vermeide das. In der Praxis stellt sich höchsten die Frage, wie kleinteilig Testcases ausfallen sollen, da lokal definierte Funktionen sich separaten Tests entziehen. Wenn man diese aber als Implementationsdetail der äußeren Methode ansieht, verliert dieses Argument viel an Relevanz. Problematisch wird es aus meiner Sicht, sobald lokale Funktionen in sich so komplex werden, dass sie besser doch separat getestet werden sollten.
Re: Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 13:49
von __deets__
Ich benutze das zB fuer lokale Praedikate, die mit einem lambda nicht zu schaffen sind. Oder auch als Closures fuer Dekoratoren zB. Und natuerlich nur, wenn ich die Funktion nicht losgeloest brauchen kann.
Re: Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 13:59
von kbr
Das Thema Closures für Dekoratoren löse ich gerne, indem ich den Dekorator selbst als Klasse implementiere. Funktionell macht das keinen Unterschied, ich finde den Ansatz aber eleganter. Sicher auch Geschmacksache ...

Re: Funktion innerhalb einer methode
Verfasst: Montag 3. Juni 2019, 14:11
von Sirius3
Bis auf sehr kleine Funktionen, die zu groß für ein lambda sind, sollte man keine verschachtelten Funktionen definieren, weil sie nicht separat testbar sind. Das hat jetzt aber nichts direkt mit Objektorientierung zu tun.