Я хотел бы проверить поведение функции по умолчанию. У меня есть следующее:
# app/foo.py
DEFAULT_VALUE = 'hello'
def bar(text=DEFAULT_VALUE):
print(text)
# test/test_app.py
import app
def test_app(monkeypatch):
monkeypatch.setattr('app.foo.DEFAULT_VALUE', 'patched')
app.foo.bar()
assert 0
Выход hello
; не то, что я хотел.
Одним из решений является явная передача значения по умолчанию: app.foo.bar(text=app.foo.DEFAULT_VALUE)
.
Но мне интересно, что это не кажется проблемой при использовании по умолчанию глобальной области видимости:
# app/foo.py
DEFAULT_VALUE = 'hello'
def bar():
print(DEFAULT_VALUE)
Выход patched
.
Почему это происходит? И есть ли лучшее решение, чем явно передать значение по умолчанию?