Я бы хотел проверить поведение функции по умолчанию.У меня есть следующее:
# 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
.
Почему это происходит?И есть ли лучшее решение, чем явная передача по умолчанию?