Funktion innerhalb einer methode

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.
Antworten
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

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?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

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 ... :wink:
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Antworten