У меня возникают проблемы с частью 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()
При создании Person или друга объекта, вы назначаете его к переменной с именем 'new', но что вы делаете с этой переменной? Вы нигде не храните его, поэтому в следующий раз, когда вы создадите новый объект Person или Friend, старый будет перезаписан. Попробуйте создать список и с помощью 'my_list.append()' для хранения ваших объектов - тогда вы сможете перебирать свой список. – rmunn
Как все говорят. Списки, вероятно, лучше всего. Если вы заинтересованы в чем-то, что будет делать именно то, что вы пытаетесь использовать в elif x == 2, есть что-то. Вы можете искать метаклассы. С небольшим количеством работы класс, наследующий класс Person, может искать среди всех Лица. Вам, вероятно, еще нужен список или словарь. Они не самые легкие или лучшие во всех ситуациях, но метаклассы могут быть полезны иногда. –