Wie packt ein Affe eine Funktion in Python?

Ich habe Probleme beim ersetzen einer Funktion aus einem anderen Modul mit einer anderen Funktion, und es macht mich verrückt.

Sagen wir, ich habe ein Modul bar.py das sieht dann so aus:

from a_package.baz import do_something_expensive

def a_function():
    print do_something_expensive()

Und ich habe ein anderes Modul, das wie folgt aussieht:

from bar import a_function
a_function()

from a_package.baz import do_something_expensive
do_something_expensive = lambda: 'Something really cheap.'
a_function()

import a_package.baz
a_package.baz.do_something_expensive = lambda: 'Something really cheap.'
a_function()

Ich würde erwarten, dass die Ergebnisse bekommen:

Something expensive!
Something really cheap.
Something really cheap.

Aber stattdessen bekomme ich diese:

Something expensive!
Something expensive!
Something expensive!

Was mache ich falsch?

InformationsquelleAutor der Frage guidoism | 2010-03-03

Schreibe einen Kommentar