我对蟒蛇和编程的世界都很陌生,而且很难让我鼓起勇气提出问题,但是我踩到了,所以我认为id吸了它并要求帮助
我正在制作地址簿。
class Person():
def __init__(self,name,number,email):
self.name = name
self.number = number
self.email = email
contact = Person('Mike','1-800-foo-spam','email@email.com')
我的问题是如何将所有这些属性存储在字典中,其中contact.name作为键,contact.number和contact.email作为值。
奖金问题。 字典应该在课外,也许在主要功能中? 要么 它是否需要是一个类变量(不完全确定它们是如何工作的) 或对象变量
类似
self.storage = {}
非常感谢任何帮助。
谢谢!
答案 0 :(得分:0)
你可以很容易地得到一个带有元组的字典作为值。
a = {}
a["bob"] = ("1-800-whatever","bob@gmail.com")
答案 1 :(得分:0)
如果你想把它变成一个类变量,你只需要在Person
类中创建一个空字典:
class Person():
storage = {}
然后在__init__
中,您可以将新人的信息存储在该词典中:
def __init__(self,name,number,email):
self.name = name
self.number = number
self.email = email
Person.storage[name] = (number, email)
正如您所看到的,使用类名访问类属性,但与其他任何属性一样。如果需要更新它们,可以将它们存储为元组或列表。但是,如果您打算进行更改,最好存储实际的Person
对象,以节省必须同时更新Person.storage
和实际人员。这更容易做到:
def __init__(self,name,number,email):
self.name = name
self.number = number
self.email = email
Person.storage[name] = self
self
指的是使用Person
创建的__init__
实例。那是迈克在你的例子中。然后,您可以按属性访问其值:
Person.storage["Mike"].number
同样正如凯文在评论中指出的那样,您可能想要检测密钥是否已经存在以避免覆盖旧条目(例如,如果字典中已有迈克):
self.email = email
if name in Person.storage:
# Make unique name
Person.storage[name] = (number, email)
答案 2 :(得分:0)
如果我把这些信息放在字典中,我会这样做:
class Person():
def __init__(self,name,number,email):
self.name = name
self.number = number
self.email = email
self.storage = {self.name: [self.number, self.email]}
def getStorage(self):
return self.storage
contact = Person('Mike','1-800-foo-spam','email@email.com')
print contact.storage
# or
print contact.getStorage()
但是字典的整个想法是拥有许多键和相应的值。在这个例子中,它总是只有一个。所以,我想到了另一种模式:
class Person():
def __init__(self,name,number,email):
self.name = name
self.number = number
self.email = email
# creating some example contacts
c1 = Person('Mike','1-800-foo-spam','email@email.com')
c2 = Person('Jim','1-700-foo-spam','e111mail@email.com')
c3 = Person('Kim','1-600-foo-spam','e222mail@email.com')
# creating a dictionary to fill it with c1..cn contacts
contacts = {}
# helper function to automate dictionary filling
def contactToDict(list_of_contacts):
for item in list_of_contacts:
contacts[item.name] = (item.number, item.email)
contactToDict([c1, c2, c3])
"""
expected output:
Mike: ('1-800-foo-spam', 'email@email.com')
Jim: ('1-700-foo-spam', 'e111mail@email.com')
Kim: ('1-600-foo-spam', 'e222mail@email.com')
"""
for key, val in contacts.items():
print str(key) + ": " + str(val)
问题标题的答案:值应该是一种对象类型,允许在其中包含“列表”(即列表,元组,另一个字典或具有许多属性的自定义类型对象。)