Как вызвать объект, созданный в модуле - PullRequest
1 голос
/ 21 марта 2012

У меня проблема с классом в Python. Я хотел бы знать, как вызвать объект, созданный в модуле в другой программе Python.

Позвольте мне показать пример. У меня есть эти объекты в файле "class_module.py"

def objectCase():
    object1 = class_name("object1")
    object2 = class_name("object2")
    object3 = class_name("object3")

def other_objectCase():
    other_object1 = class_name("other_object1")
    other_object2 = class_name("other_object2")
    other_object3 = class_name("other_object3")

С from class_module.py import *, я думаю, что если я использую функцию objectCase(), у меня в программе есть этот объект (object1, object2, object3) и, если я использую функцию otherobjectCase(), я вызываю все otherobject. Но это не так. В чем проблема?

Ответы [ 3 ]

4 голосов
/ 21 марта 2012

Вы создаете локальные переменные внутри функций. Они теряются, как только функция возвращается. Если вам понадобятся эти объекты позже, return их звонящему

return object1, object2, object3

и привязать к ним имена в коде вызова

a, b, c = objectCase()
2 голосов
/ 21 марта 2012

Ознакомьтесь с документацией Области и пространства имен , имена object1, object2 и object3 являются локальными для функции objectCase(), поэтому вы не сможете доступ к ним из вашего основного модуля, так как ваш код написан в настоящее время.

Наиболее типичным способом выполнения желаемого действия является возврат этих переменных:

def objectCase():
    object1 = class_name("object1")
    object2 = class_name("object2")
    object3 = class_name("object3")
    return object1, object2, object3

И затем при вызове присваивает возвращаемые значения тем же именам:

object1, object2, object3 = objectCase()

Нет хорошего способа автоматически сохранять те же имена, что и у локальных переменных, но здесь уместно возвращать словарь. Вместо возврата object1, object2, object3 вы можете вернуть {'object1': object1, 'object2': object2, 'object3': object3}, и тогда вызывающая функция может сделать что-то вроде этого:

result = objectCase()
# do something with result['object1'], result['object2'], or result['object3']
1 голос
/ 21 марта 2012

Если вы хотите, чтобы object1, ... находилось в пространстве имен модуля, у вас есть несколько вариантов:

object1, object2, object3 = objectCase()

или, если вы не хотите иметь дело с назначениями, вы можете использовать ключевое слово global в функции:

def objectCase():
    global object1, object2, object3
    object1 = class_name("object1")
    object2 = class_name("object2")
    object3 = class_name("object3")

или вы можете вообще пропустить функцию и просто указать ее в качестве кода верхнего уровня:

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