#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