AW: [mailinglist] [Python-de] Funktion sucht Aufrufer

robert kuzelj robert_kuzelj at yahoo.com
Fre Sep 10 16:36:06 CEST 2004


Diez B. Roggisch wrote:
>>Gibt es für sowas eigentlich eine vernünftige Anwendung ?
> 
> 
> Ich habe jetzt auch langsaw 15 Jahre Programmieren auffem Buckel - aber sowas 
> noch nie im entferntesten benoetigt. Wuerde mich auch mal interessieren, was 
> da erreicht werden soll.

gerne genommes konstrukt zb. in aspekt orientierten sprachen
(cflow | cflowbelow). warum? eine program laeuft im testmodus
und deine funktion "getFoo(): return Foo()" moechte in dem
falle lieber ein neues TestFoo() zurueckgeben (protokoll
gleich zu Foo).
die einzige moeglichkeit das anders hinzubekommen waere das
objekt, dass getFoo besitzt mit dem wissen ueber den "testzustand"
zu versehen. das kann auf zwei arten passieren per membervariable
oder als uebergabe variablen durch alle func/methoden aufrufe.

beide optionen moegen nicht immer zur verfuegung stehen. wenn objekte
zb. durch faktories erzeugt werden und es keine moeglichkt gibt
den zustand zu setzen. moeglichkeit zwei ist zudem enorm fragil.

da ist doch sowas wie
def getFoo():
    if (suche_stack_nach_aufrufenden_testtreiber()):
       return TestFoo()
    else:
       return Foo()

wesentlich besser. noch angenehmer jedoch waere ein verheiraten mit
descriptoren (2.4)

<code achtung="unvollstaendig_nur_zur_demo">
def test_advise(Type):
    #wrap original funtion into delegate
    if (suche_stack_nach_aufrufenden_testtreiber()):
       return TestFoo()
    else:
       return delegate()

# und dann hier
@test_advise(TestFoo)
def getFoo():
       return Foo()
</code>

nicht nur, dass du in dem fall die testzustand nicht setzen musst,
dein eigentlicher code bleibt vom wissen um das testen voellig
unberuehrt und wartbar. ist doch nett.

ciao robertj