How do I print the attributes of a user-specified object?

Question:

I would like for the user to input the name of an object and be able to process their choice after it has been entered. This is the idea I had

class somebody:
  def __init__(self, location, age, sport):
    self.location = location
    self.age = age
    self.sport = sport
    
nick = somebody('Houston','22','football')
david = somebody('College Station','25','swimming')
peter = somebody('Austin','15','track')

choose_a_person = input('Enter the name of a person: ') #identify which person they are asking about

print('Location is', choose_a_person.location)
print('Age is', choose_a_person.age)
print('Sport is', choose_a_person.sport)

but obviously the input choose_a_person will remain a string which has no attributes. Is there another method to do this? I don’t want to have to run the input through a series of if statements to determine which object to print as I am planning to increase the number of objects in this class.

Asked By: Nick Reitz

||

Answers:

Store your persons in a dict and then get by a name:

class Somebody:
    def __init__(self, location, age, sport):
        self.location = location
        self.age = age
        self.sport = sport


nick = Somebody('Houston', '22', 'football')
david = Somebody('College Station', '25', 'swimming')
peter = Somebody('Austin', '15', 'track')

persons = {
    'nick': nick,
    'david': david,
    'peter': peter
}

name = input('Enter the name of a person: ')  # identify which person they are asking about

choose_a_person = persons[name]


print('Location is', choose_a_person.location)
print('Age is', choose_a_person.age)
print('Sport is', choose_a_person.sport)

Also, as general advice start your class names with the capital letter.

Answered By: funnydman

If, for some reason, the answer given by @funnydman is not applicable to your situation – another solution would be to use the locals function, which returns a dictionary of the local variables. Then you can do something like person = locals().get(choose_a_person].
There’s also eval, but it is notoriously unsafe.

Answered By: Tomer Ariel
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.