python3: как использовать один и тот же экземпляр класса из разных файлов

#python #python-3.x #class

#python #python-3.x #класс

Вопрос:

например f1.py (упрощенный):

 ...
class TestClass:
    x = 0

...
  

и f2.py :

 from f1 import *
tc = TestClass()

tc.x = 73
  

и f3.py :

 from f1 import *
...
print(tc.x)
...
  

Конечно, это неправильно, но как сделать это правильно?
Ну, мне просто нужен доступ к данным и функциям в одном экземпляре класса из разных файлов, сравнимый, например, с ‘extern’ в C. Генерация нового экземпляра в каждом файле будет генерировать разные переменные, поэтому неприменимо. Спасибо за помощь.

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

1. Теперь вот пример слишком маленького кода. Что на самом деле находится в, f3.py к которому нужно получить доступ tc.x ?

2. есть ли причина, по которой вы не можете импортировать f2 вместо f1 в f3?

3. хотя не совсем ясно, что вы пытаетесь сделать, если, как кажется, вам нужен экземпляр «singleton», то почему бы просто не поместить tc = TestClass() внизу f1.py и просто импортировать его в другие файлы, а не в сам класс? (К сожалению, Python не позволяет вам отказаться от экспорта класса, как это делают многие другие языки.)

4. Спасибо; комментарии и ответы помогли мне понять. Поэтому я использую более простой и достаточный метод с tc = TestClass() в f1.py и импортировать f1 в другие файлы, где это необходимо. Спасибо за быструю помощь

5. @quamrana: Из-за своего размера проект состоит примерно из 10 разных файлов, большинство из которых имеют доступ к данным и методам одного и того же класса. Мне нравится использовать классы, чтобы сделать модули более переносимыми. Возможно, я зашел слишком далеко в сокращении описания, f3.py является заполнителем для большего количества файлов с той же функциональностью.

Ответ №1:

Просто импортируйте f2.py :

 from f2 import tc
...
print(tc.x)
...
  

Ответ №2:

В качестве тестового класса вы должны использовать одноэлементный класс. Ниже приведена ссылка на реализацию шаблона в Python, по которой вы можете следовать. https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_singleton.htm