2013-04-29 4 views
0

У меня возникают проблемы с частью get_info моего кода. Конкретно, моя get_info работает до тех пор, как я вхожу в себя части и соответствует, например, в классе, т.е.Назначение: Python 3.3: вызов экземпляра класса через атрибут

x=Person('Joe', 'Schmoe', '123-456-7890') 
x.get_info() 

Однако, я не знаю, как воспитывать информацию контакта путем поиска для фамилии. Насколько мне известно, классы не являются итерабельными, поэтому я не могу использовать цикл for. Ясно, что что-то не так с нижней частью моего кода, начиная с «Элиф х == 2:» Вот код, у меня есть:

class Person: 
    def __init__(self, first_name, last_name, phone_number): 
     self.first_name=first_name 
     self.last_name=last_name 
     self.phone_number=phone_number 
     print("Initialized Person: ", self.first_name) 
    def get_info(self): 
     print(self.first_name, self.last_name, self.phone_number) 

class Friend(Person): 
    def __init__(self, first_name, last_name, phone_number, email, birth_date): 
     Person.__init__(self, first_name, last_name, phone_number) 
     self.email = email 
     self.birth_date = birth_date 
     print("Initialized Friend:", self.first_name) 
    def get_info(self): 
     print(self.first_name, self.last_name, self.phone_number, self.email, self.birth_date) 

def main(): 
    exitprogram=False 
    a=("1. Add Contact") 
    b=("2. Lookup Contact") 
    c=("3. Exit Program") 
    while exitprogram==False: 
     print(a) 
     print(b) 
     print(c) 
     x=(int(input("Please select a number: "))) 
     if x==1: 
      a1=("1. Add Regular Person") 
      a2=("2. Add Friend") 
      print(a1) 
      print(a2) 
      y=(int(input("Please select a number: "))) 
      if y==1: 
       f=(input("Please enter the first name: ")) 
       l=(input("Please enter the last name: ")) 
       p=(input("Please enter the phone number: ")) 
       new=Person(f, l, p) 
      elif y==2: 
       f=(input("Please enter the first name: ")) 
       l=(input("Please enter the last name: ")) 
       p=(input("Please enter the phone number: ")) 
       e=(input("Please enter the email address: ")) 
       b=(input("Please enter the birth date in m/d/year format: ")) 
       new=Friend(f, l, p, e, b) 
     elif x==2: 
      w=(input("Please enter the last name of the contact you wish to view: ")) 
      w=Person.get_info(w) 
     elif x==3: 
      exitprogram=True 
main() 
+0

При создании Person или друга объекта, вы назначаете его к переменной с именем 'new', но что вы делаете с этой переменной? Вы нигде не храните его, поэтому в следующий раз, когда вы создадите новый объект Person или Friend, старый будет перезаписан. Попробуйте создать список и с помощью 'my_list.append()' для хранения ваших объектов - тогда вы сможете перебирать свой список. – rmunn

+0

Как все говорят. Списки, вероятно, лучше всего. Если вы заинтересованы в чем-то, что будет делать именно то, что вы пытаетесь использовать в elif x == 2, есть что-то. Вы можете искать метаклассы. С небольшим количеством работы класс, наследующий класс Person, может искать среди всех Лица. Вам, вероятно, еще нужен список или словарь. Они не самые легкие или лучшие во всех ситуациях, но метаклассы могут быть полезны иногда. –

ответ

1

Вам необходимо сохранить контакты в списке. Например:

contacts = [] 
# To add a contact: 
contacts.append(Person(...)) 

Если вы сделаете это, конечно же, вы можете цикл через него, как и любой другой список:

for person in contacts: 
    if person.last_name == requested_last_name: 
     person.get_info() 
+0

Работал! Большое спасибо. Теперь я понимаю, что гораздо проще просто добавить каждого контакта в список, а затем перебрать список. –

1

Классы Iterable, если вы сделаете их итерацию, но не поможет вам здесь. Вы должны держать список людей:

people = [] 

И когда вы сделаете новый человек, добавьте их в список:

person = Person(firstname, lastname, phone) 
people.append(person) 

Теперь вы можете осуществлять поиск по списку людей:

def search(people, lastname): 
    for person in people: 
     if person.lastname == lastname: 
      return person 

    return False 

 Смежные вопросы

  • Нет связанных вопросов^_^