簡體   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