Ваш код полон циклического импорта, посмотрите на Python: Круговой (или циклический) импорт , чтобы понять, о чем я говорю.
В основном проблема в том, что когда компилятор приходит к этой строке:
File_2.modify()
Файл_2 загружен не полностью, что означает, что компилятор еще не прочитал строки:
def modify():
File_1.main.example = "Modified"
Так как он был возвращен к File_1 от предыдущего:
import File_1
Кроме того, ваш код кажется довольно странным. Если вы хотите предоставить больше информации о вашем реальном коде, возможно, лучший дизайн мог бы решить вашу проблему.
Редактировать: У вас есть для удаления циклического импорта. Один из способов сделать то, что вам нужно, - передать аргумент функции File_2.modify(arg)
и поработать над этим:
# File_2
# !! do NOT import File_1 in this file
def modify(obj):
obj.value += 7
Но в вашем случае вам придется передать весь объект (self
) в функцию modify
, и это является пустой тратой на изменение только одного значения.
Было бы лучше сделать что-то вроде:
# File_1
import File_2
class Main:
# ...
def modify()
self.value = File_2.modify(self.value)
# File_2
# !! do NOT import File_1 in this file
def modify(num):
return num + 7
Но, опять же, это всего лишь примеры, так как вы не показываете свой реальный код, мы не можем сказать вам, что лучше в вашем случае (может быть, ни один из вышеперечисленных), или очень вам помочь.