Jaff
Jaff

Reputation: 185

Iterate through instantiated objects of a class

Isit possible to loop through the objects of class person and extract the attributes?

so for e.g. from below code after looping the output would be for each object as such Object mike, name-Mike, age-20

class Person(object):
    def__init__(self,name,age):
    self.name = name
    self.age = age


mike = Person('Mike',20)
john = Person('John',20)
jack = Person('Jack',20)
adam = Person('Adam',20)

Thanks

Upvotes: 1

Views: 3641

Answers (3)

Karthik Gunapati
Karthik Gunapati

Reputation: 11

if my understanding is right, you are asking about looping the class person then it can be done like this.

class person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
for name,age in {'mike':20,'john':20,'jack':20}.iteritems():
    p = person(name,age)
    print ('I am %s my age is %d' %(p.name,p.age))
## answer

I am mike my age is 20 I am john my age is 20 I am jack my age is 20

Upvotes: 1

wim
wim

Reputation: 362507

To loop the attributes of a given instance, I think you're looking for the builtin function vars:

>>> mike = Person('Mike', 20)
>>> vars(mike)
{'age': 20, 'name': 'Mike'}

To loop through all instances of a given class is not possible, unless you add some code to maintain the list of instances yourself.

Upvotes: 1

Ned Batchelder
Ned Batchelder

Reputation: 375484

Python classes don't automatically track all their instances. You can use a class attribute to track them yourself if you need to:

class Person(object):
    people = []

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.people.append(self)

Even better would be to have a separate object that tracked people. The Person.people attribute here is a single global value for the process, which can limit the usability and testability of the class.

Upvotes: 4

Related Questions