使用python创建一个类的多个实例的函数

时间:2018-11-05 19:27:29

标签: python function multiple-instances

我想编写一个可以创建一个类的多个实例的函数,但是我遇到了一些问题。我想做的是这样的:

class MyClass:
    def __init__(self):
        self.x = 0
        self.y = 1



for i in range(10):
    exec ("obj{} = MyClass()".format(i))

通过循环,我可以创建该类的多个实例,因此当我在Python Shell obj1中进行调用时,它将返回类似以下内容的

>>> obj1
<__main__.MyClass object at 0x0036F0F0>
>>> obj2
<__main__.MyClass object at 0x0036F0D0>

这意味着obj0obj1obj2创建成功,虽然很棒,但是我想回复相同的过程,但是具有可以接收(n)的功能循环重复次数。

class MyClass:
    def __init__(self):
        self.x = 0
        self.y = 1    

def function_create_multiple_instances(n):
    for i in range(n):
        exec ("obj{} = MyClass()".format(i))
        print(i)

function_create_multiple_instances(10)

当我尝试使用Python Shell时,这意味着未创建对象

>>> obj1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'obj1' is not defined
>>> obj2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'obj2' is not defined
>>>

所以我不知道发生了什么,所以如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

在某个函数中创建变量会将这些变量绑定到函数的作用域,并且无法在该函数外部访问它们。要在函数内部声明全局变量,您必须明确地将它们称为全局变量。像global obj1

因此,您的功能将更改为:

def function_create_multiple_instances(n):
    for i in range(n):
        exec("global obj{0}\nobj{0} = MyClass()".format(i))
        print(i)

现在,以function_create_multiple_instances(10)调用此函数将创建全局对象,您将可以通过shell对其进行访问。