Как получить все экземпляры данного класса в другом модуле - PullRequest
0 голосов
/ 13 апреля 2020

Так что я не уверен, что на этот вопрос был дан ответ в другом месте, но я не смог найти какое-либо жизнеспособное решение, конкретно относящееся к этому делу, так как они были либо как получить доступ к экземплярам в том же файле (который работает нормально), либо с помощью перезагрузки () (который не работал).

У меня есть два python файла, module1.py и module2.py. В module1.py есть класс с кучей экземпляров, к которым мне нужно получить доступ из module2. Я добавляю каждый экземпляр в список (как переменную класса) при создании экземпляра, но при импорте module1 экземпляры не были созданы, поэтому этот список пуст. Это означает, что я могу получить доступ к этому списку экземпляров в module1, но в module2 он пуст.

module1.py

class Class1:
  instances = [ ]
  def __init__(self):
    self.instances.append(self)

a = Class1()
b = Class1()
c = Class1()

module2.py

import module1
def foo():
  print(len(module1.Class1.instances))
  #prints zero, list should not be empty

Так как я могу получить доступ к этим экземплярам, ​​которые созданы в module1 из module2?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

См. Module1.py ниже:

class Class1:
  instances = [ ]
  def __init__(self):
    self.instances.append(self)

cls = Class1()
print(Class1.instances)

Только если вы создадите объект, он будет добавлен в список instance []. так как вы не создали объект, список был пустым.

А в module2.py:

import module1
def foo():
  print(len(module1.Class1.instances))
foo()

Список экземпляров принадлежит классу, поэтому вам нужно дать как module1.Class1.instances

Вывод выглядит следующим образом: После запуска обоих файлов:

[<module1.Class1 object at 0x00000278A447CB70>]
1
0 голосов
/ 13 апреля 2020

Вместо этого вам следует вызвать импортируемый класс, поэтому либо импортируйте с помощью [* (импортировать все)] [1], либо импортируйте указанные классы c следующим образом:

from module1 import *
def foo():
    return Class1.instances
c = foo()[0]
print(type(c)) # Is of type Module1.Class1

and In module1:

class Class1:
   instances = []
   def __init__(self):
       self.instances.append(self)


a = Class1()
b = Class1()

Теперь у экземпляров есть 2 элемента, и вы можете получить к ним доступ в модуле2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...