繁体   English   中英

如何在python中使用循环创建多个类对象?

[英]How to create multiple class objects with a loop in python?

假设你必须在 python 中创建 10 个类对象,并对它们做一些事情,比如:

obj_1 = MyClass()
other_object.add(obj_1)
obj_2 = MyClass()
other_object.add(obj_2)
.
.
.
obj_10 = MyClass()
other_object.add(obj_10)

您将如何使用循环来执行此操作,并为每个对象(如obj_1 )分配一个变量,以使代码更短? 每个对象都应该可以在循环外访问

obj_1.do_sth()

这个问题每天都会以不同的方式被问到。 答案是:将数据与变量名分开, 这是必读的博文

在这种情况下,为什么不制作一个 obj 列表呢?

objs = [MyClass() for i in range(10)]
for obj in objs:
    other_object.add(obj)

objs[0].do_sth()

您可以使用列表来定义它。

objs = list()
for i in range(10):
    objs.append(MyClass())

如前所述创建字典,但在这种情况下,每个键都有您要创建的对象名称的名称。 然后将该值设置为您要实例化的类,例如:

class MyClass:
   def __init__(self, name):
       self.name = name
       self.checkme = 'awesome {}'.format(self.name)
...

instanceNames = ['red', 'green', 'blue']

# Here you use the dictionary
holder = {name: MyClass(name=name) for name in instanceNames}

然后,您只需调用持有者密钥,您就可以使用类的所有属性和方法。

holder['red'].checkme

输出:

'awesome red'

使用字典来获取没有名称列表的唯一名称:

class MyClass:
    def __init__(self, name):
        self.name = name
        self.pretty_print_name()

    def pretty_print_name(self):
    print("This object's name is {}.".format(self.name))

my_objects = {}
for i in range(1,11):
    name = 'obj_{}'.format(i)
    my_objects[name] = my_objects.get(name, MyClass(name = name))

输出:

"This object's name is obj_1."
"This object's name is obj_2."
"This object's name is obj_3."
"This object's name is obj_4."
"This object's name is obj_5."
"This object's name is obj_6."
"This object's name is obj_7."
"This object's name is obj_8."
"This object's name is obj_9."
"This object's name is obj_10."

我希望这就是你要找的。

class Try:
    def do_somthing(self):
        print 'Hello'

if __name__ == '__main__':
    obj_list = []
    for obj in range(10):
        obj = Try()
        obj_list.append(obj)

    obj_list[0].do_somthing()

输出:

Hello

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM