Class 赋值:Python 3.3:通过属性调用类实例
我的代码中的“获取信息”部分遇到了一些问题。具体地说,只要我在self部分中输入get_信息,并且它对应于类中的实例,即Class 赋值:Python 3.3:通过属性调用类实例,class,search,python-3.x,iterable,Class,Search,Python 3.x,Iterable,我的代码中的“获取信息”部分遇到了一些问题。具体地说,只要我在self部分中输入get_信息,并且它对应于类中的实例,即 x=Person('Joe', 'Schmoe', '123-456-7890') x.get_info() 但是,我不知道如何通过搜索姓氏来显示联系人信息。据我所知,类是不可iterable的,所以我不能使用for循环。显然,我的代码的底部部分有问题,以“elif x==2”开头:“以下是我的代码: class Person: def __init__(self,
x=Person('Joe', 'Schmoe', '123-456-7890')
x.get_info()
但是,我不知道如何通过搜索姓氏来显示联系人信息。据我所知,类是不可iterable的,所以我不能使用for循环。显然,我的代码的底部部分有问题,以“elif x==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()
如果你让类变得可移植,那么它们是可移植的,但这对你没有帮助。您需要保留一份人员列表:
people = []
def search(people, lastname):
for person in people:
if person.lastname == lastname:
return person
return False
当你成为一个新人时,将他们添加到列表中:
person = Person(firstname, lastname, phone)
people.append(person)
现在,您可以在人员列表中搜索:
people = []
def search(people, lastname):
for person in people:
if person.lastname == lastname:
return person
return False
您需要将联系人存储在列表中。例如:
contacts = []
# To add a contact:
contacts.append(Person(...))
当然,如果您这样做,您可以像其他列表一样循环:
for person in contacts:
if person.last_name == requested_last_name:
person.get_info()
创建Person或Friend对象时,将其分配给名为
new
的变量,然后如何处理该变量?您没有将其存储在任何位置,因此下次创建新的Person或Friend对象时,旧对象将被覆盖。尝试创建一个列表,并使用my\u list.append()
来存储您的对象——然后您将能够在列表上进行迭代。就像每个人都说的那样。列表可能是最好的。如果你对某样东西感兴趣,而这正是你在“elif x==2”中尝试的东西,那么有一些东西。您可以查找元类。通过一些工作,从Person类继承的类可以在所有人中搜索。你可能仍然需要一份清单或一本字典。它们不是最简单的东西,也不是所有情况下最好的,但是元类有时是有用的。成功了!谢谢。我现在意识到,只需将每个联系人添加到列表中,然后在列表中进行迭代,就可以轻松得多。