Доступ к объектам из разных файлов

#python

#python

Вопрос:

Допустим, у меня есть два таких файла:

TestClass.py

 class Test:
    variable = None

    def __init__(self, value):
        self.variable = value
  

__main__.py

 from TestClass import Test
TestObject = Test(123)
  

Выполнение следующих работ, но мне это не очень нравится. Хочу найти способ сделать это, не передавая объект в качестве аргумента.

access.py

 def testFunction(TestObject):
    print TestObject.variable
  

Есть идеи?

В любом случае, спасибо всем за чтение 🙂

РЕДАКТИРОВАТЬ: Пока спасибо за ответы. Имена были просто примером, и импорт одного и того же модуля во множество разных файлов означал бы, что разные объекты в памяти выполняют одну и ту же функцию. Я хочу получить доступ к объекту из main.py в любом другом модуле, не имея разных его копий в памяти.

Комментарии:

1. Ваш исходный файл действительно называется __main__.py ? Это кажется нетрадиционным.

2. Почему вы хотите получить доступ к этому объекту, а не скопировать его? Разве вы не можете просто сохранить копию объекта в access.py , а затем обратиться к нему?

3. Кто вызывает функцию в access.py ? Почему бы вам просто не импортировать TestObject из main в access.py ? Импорт ничего не «копирует», он просто делает имя доступным в другом пространстве имен.

Ответ №1:

Как указали некоторые из комментаторов, решение здесь заключается в импорте.

Как сказал Майк, при импорте ничего не копируется.

test.py

 import test2
print test2.dog
  

test2.py

 dog = "puppy"
  

test3.py

 import test2

print test2.dog
test2.dog = "not a dog anymore"
import test1
  

если вы запустите

 python test3.py
  

вы получите следующее

 puppy
not a dog anymore
  

Происходит то, что test2 определяет переменную. Импортируя его, переменная попадает в пространство имен test3. Затем test3 изменяет переменную и импортирует test.py .

Аналогично test.py импортирует test2 и печатает переменную. Поскольку он просто получил ссылку на переменную, а не копию, было напечатано новое значение, а не значение, введенное изначально.

Если вы запустили

 python test.py
  

вы бы получили

 puppy