Creating alot of class instances?
Andre Engels
andreengels at gmail.com
Sun Jul 5 15:20:38 EDT 2009
On 7/5/09, kk <maymunbeyin at gmail.com> wrote:
> I am new to Python classes and trying to figure out this particular
> issue here. I will need to create instances of a class. But at the
> moment I do not know how many instances I will end up having, in every
> case it might be different. Most of the documents I read makes this
> simpl class-student analogy to explain python classes which is fine.
> But in those examples the number and the names of the instances were
> known and limited
That's no problem. The only limit to the number of instances of a
class you can create is your memory - and not even that if you don't
need to 'keep' the instances.
> I will be querying some data and create class instances based on the
> data I gather. But the problem as I mentioned is that I do not know
> the names and the number of the end class instances. They will be
> based on the content of the data. So how can I create class instances
> within a loop and when the loop is done how can I figure out the list
> of instances via class membership? I can track the names by
> introducing another list but I want to understand the class side of
> things.
>
> The solution might be dead simple but I just cannot figure out at the
> moment.
>
> For example this is what I need in the simplest form
>
> class myclass():
> def __init__(self,name):
> self.name=name
>
> for count,data in enumerate(some list):
> instance_count=myclass()
> instance_count.name=data
>
> print instances
Okay, to solve your problem, we add a list containing all the instances:
class myclass():
def __init__(self,name):
self.name=name
instances = []
for count,data in enumerate(some list):
instance_count=myclass()
instance_count.name=data
instances.append(instance_count)
print instances
=============================================
However, that won't work because myclass has an __init__ with 2
attributes, so you will have to call it using an attribute:
class myclass():
def __init__(self,name):
self.name=name
instances = []
for count,data in enumerate(some list):
instance_count=myclass(data)
instances.append(instance_count)
print instances
=============================================
This works, but it can be done better:
First we notice that count is not used at all, so why create it?
class myclass():
def __init__(self,name):
self.name=name
instances = []
for data in some list:
instance_count=myclass(data)
instances.append(instance_count)
print instances
=============================================
Then, the variable instance_count is created once, then used in the
next line. We can do that at once:
class myclass():
def __init__(self,name):
self.name=name
instances = []
for data in some list:
instances.append(myclass(data))
print instances
====================
Finally, "print instances" does not give very nice looking
information, so I would change this to:
class myclass():
def __init__(self,name):
self.name=name
instances = []
for data in some list:
instances.append(myclass(data))
print (instance.name for instance in instances)
--
André Engels, andreengels at gmail.com
More information about the Python-list
mailing list