У вас есть недостаток в файле mymodule.py
; вы никогда магазин экземпляра. Храните его в переменной:
somevariable = Square('hello', 'there')
Вы не можете просто вызвать конструктор и позволить ему болтаться.
Зацикливание по атрибутам mymodule
в поисках чего-то с именем Square
не получит то, что вы хотите, вы найдете ссылку на класс, а не экземпляр.
Может быть, вы должны искать объекты Square
типа вместо:
from models import Square
for value in vars(m).itervalues():
if isinstance(value, Square):
models.append(value)
Если вы хотите, чтобы избежать необходимости импортировать Square
класс, вы должны проверить имя типа вместо, который более хрупкими:
for value in vars(m).itervalues():
if getattr(type(value), '__name__', None) == 'Square':
models.append(value)
Если вы действительно хотите отложить строительство, вместо того, чтобы построить его позже с набором предварительно заданных значений, используйте functools.partial()
:
from models import Square
from functools import partial
somevariable = partial(Square, 'hello', 'there')
Если теперь импортировать somevariable
и вызов его, парциальное будет применять аргументы уже переданные в и создать экземпляр:
instance = somevariable() # calls Square('hello', 'there')
Откуда взялись 'models' в main.py? – martineau
@martineau Просто список python. – user1491915
ОК, это было путано из-за 'из моделей ...' у вас в mymodule.py и не было определения для него нигде в вашем main.py. – martineau