Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 2, 2012 12:36:12

Serbis
От:
Зарегистрирован: 2012-02-13
Сообщения: 38
Репутация: +  0  -
Профиль   Отправить e-mail  

Сослаться на экземпляр класса в другом модуле

Подскажите вот в какой ситуации. У меня имеются два модуля. В первом модуле есть класс и в этом же модуле происходит создание его инстанса. В втором модуле есть функция которой нужно передать этот инстанс. Все было бы просто, если бы можно было просто создать во втором модуле еще один инстанс класса Main(), но условие такого, что конструктор класса Main() может быть вызван только один раз за работу программы, поэтому второй инстанс класса создать создать нельзя. Как можно сослаться на main в модуле 1 из модуля 2?

Модуль 1

main = Main()
class Main():
  def __init__(self,):

Модуль 2
x = 'abc'
func(ИНСТАНС КЛАССА MAIN, x)



Офлайн

#2 Июнь 2, 2012 12:41:44

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Сослаться на экземпляр класса в другом модуле

http://docs.python.org/tutorial/modules.html

module2:

from module1 import main
x = 42
func(main, x)

Офлайн

#3 Июнь 2, 2012 14:06:29

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Сослаться на экземпляр класса в другом модуле

По мне так более правильно будет описать класс как-то так:

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

И импортировать не непосредственно инстанс класса, а сам класс. А потом вызывать func(Main(), x). Будет более гибко в будущем, да и расшвыривать по модулям инстансы вроде не очень красиво.



Отредактировано fata1ex (Июнь 2, 2012 14:07:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version