如何调用模块中创建的对象

时间:2012-03-21 16:11:58

标签: python class object module

我在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 个答案:

答案 0 :(得分:4)

您正在函数内创建局部变量。函数返回后它们就会丢失。如果您稍后需要这些对象,return将它们发送给调用者

return object1, object2, object3

并在调用代码

中将名称绑定到它们
a, b, c = objectCase()

答案 1 :(得分:2)

查看Scopes and Namespaces的文档,名称object1object2object3objectCase()函数的本地文档,因此您将因为您的代码当前已写入,因此无法从主模块访问它们。

实现所需内容的最典型方法是返回这些变量:

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']

答案 2 :(得分:1)

如果您希望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")