[Python-de] Kennt eine Funktion ihren Namen?

Det ddet at gmx.de
Fri Feb 15 00:55:23 EST 2002


Hallo,

On Fri, Feb 15, 2002 at 12:18:27AM +0100, Robert Rottermann wrote:
> ich möchte eine funktion "überladen", d.h. ssie unter verschiedenen Namen
> aufrufen. Je nach Namen soll ein parameter anders gesetzt sein.
> 
> Beispiel:
> 
> def sprache(lang='ge'):
>   print lang
> 
> franz = sprache
> 
> franz() sollte "fr" ausgeben.

Dein Beispiel geht schon in richtung
kuenstliche Intelligenz.
Denn franz soll fr ausgeben, aber der Funktion
Sprache ist fr gar nicht als Literal mitgegeben.


Wuerde eher sowas wie 

def sprache():
    if sprache.IsCalledAs('franz'):
       print 'fr'
    if sprache.IsCalledAs('deut'):
       print 'ge'

verlangen wollen.  Hum.

Ich kann das leider nicht beantworten, kann
mir aber nicht vorstellen, dass das geht.
Wuerde doch auch den Maintainer eher verwirren...

Aber mich interessiert was anderes:
Wozu braucht man das ?

Vom Design her verlangt es, dass die Funktion
innen weiss, welche Referenzen es auf sie
aussen geben kann... ist das sauber ?


Wenn ich bei Aufruf von franz() genau weiss, 
was franz() tun soll,
dann kann ich stattdessen doch auch direkt
sprache('fr') aufrufen !?

Oder ich mache gleich Varianten der Funktion:
def franz():
    print 'fra'
def span():
    print 'esp'

bzw:
def franz():
    sprache('fra')

Das einzige, wo ich sowas wie deine Anforderung
schonmal gesehen habe,
ist auf Shell/Programmebene, wo $0 abgefragt wird.

unzip kann dann ein Link auf zip sein, und in
zip wird abgefragt ob es als zip oder unzip
aufgerufen wurde, und entsprechend wird
eine andere Aktivitaet ausgefuehrt.

Ist ja ganz nett, sowas. Mir sind sauber angewandte
Optionen aber lieber.

Bin gespannt auf die Antwort

Dirk Detering



More information about the Python-de mailing list