Suppose you have to create 10 class objects in python, and do something with them, like:
obj_1 = MyClass()
other_object.add(obj_1)
obj_2 = MyClass()
other_object.add(obj_2)
.
.
.
obj_10 = MyClass()
other_object.add(obj_10)
How would you do it with a loop, and assign a variable to each object (like obj_1
), so that the code will be shorter? Each object should be accessible outside the loop
obj_1.do_sth()
Using a dictionary for unique names without a name list:
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))
Output:
"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."
I hope this is what you are looking for.
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()
Output:
Hello
Creating a dictionary as it has mentioned, but in this case each key has the name of the object name that you want to create. Then the value is set as the class you want to instantiate, see for example:
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}
Then you just call the holder key and you will have all the properties and methods of your class available for you.
holder['red'].checkme
output:
'awesome red'
you can use list to define it.
objs = list()
for i in range(10):
objs.append(MyClass())
Source: Stackoverflow.com