Каждый модуль имеет свою глобальную область видимости. fun
использует DefTest.x
, а не test.x
.
>>> import DefTest
>>> DefTest.x = 5
>>> DefTest.fun()
5
Вы можете подумать, что следующее будет также работать
from DefTest import x
x = 5
DefTest.fun()
, но это не так, потому что from DefTest import x
создает новая глобальная переменная в модуле test
, которая инициализируется с использованием значения DefTest.x
, вместо создания «псевдонима» для DefTest.x
.