инициализировать класс Python глобально? - PullRequest
0 голосов
/ 20 октября 2011

У меня есть два файла, один из test.py -

import new.py

class Test:

    def __init__(self):
        return
    def run(self):
        return 1

if __name__ == "__main__":
    one=Test()
    one.run()

и new.py

class New:
    def __init__(self):
        one.run()

New()

Теперь, когда я запускаю python test.py, я получаю эту ошибку,

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import new.py
  File "/home/phanindra/Desktop/new.py", line 5, in <module>
    New()
  File "/home/phanindra/Desktop/new.py", line 3, in __init__
    one.run()
NameError: global name 'one' is not defined

Но я хочу использовать этот экземпляр в моем New !! Могу ли я сделать это ??

редактирование:

Я хочу получить доступ к переменной в test.py в new.py, чтобы выполнить какой-то процесс и вернуть их в test.py. Разве это не возможно?

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Если вы хотите, чтобы ваш New класс использовал созданный вами экземпляр Test, вы должны передать его как часть конструктора.1007 * test.py

import new

class Test:
    def __init__(self):
        return
    def run(self):
        return 1


if __name__ == "__main__":
    one=Test()
    two = new.New(one);

Игра с глобалами - отличный способ сломать ваш код, не понимая, как вы это сделали.Лучше явно указать ссылку, которую вы хотите использовать.

0 голосов
/ 20 октября 2011

Нет, вы не можете.Самое близкое, что вы можете получить, это передать то, что вам нужно, конструктору:

class New(object):
    def __init__(self, one):
        one.run()
0 голосов
/ 20 октября 2011

one определяется внутри блока if __name__=='__main__'.Следовательно, one будет определено, только если test.py запущен как скрипт (а не импортирован).

Чтобы модуль new получил доступ к one из модуля test, вам необходимо извлечь one из блока if __name__:

test.py:

class Test:
    def __init__(self):
        return
    def run(self):
        return 1

one=Test()

if __name__ == "__main__":
    one.run()

Затем введите one по квалифицированному имени test.one:

new.py:

import test

class New:
    def __init__(self):
        test.one.run()

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