【问题标题】:Using class as a phonebook dictionary使用类作为电话簿字典
【发布时间】:2021-07-23 14:04:51
【问题描述】:
class PhoneBook:

    def __init__(self):
        self.contacts = {}

    def __str__(self):
        return str(self.contacts)

    def add(self, name, mobile=None, office=None, email=None):
        self.contacts["Name"] = name
        self.contacts["Mobile"] = mobile
        self.contacts["Office"] = office
        self.contacts["Email"] = email

obj = PhoneBook()
obj.add("Kim", office="1234567", email="kim@company.com")
obj.add("Park", office="2345678", email="park@company.com")
print(obj)

当我将 .add 方法添加到类变量时,我尝试让 PhoneBook 类添加字典列表,但是每次类变量调用 PhoneBook() 类时,都会发生字典初始化,并且只有最后一个数据保留在字典(我想:S)

有什么办法可以解决这个问题吗?谢谢。

【问题讨论】:

    标签: class dictionary methods init


    【解决方案1】:

    问题是,您使用相同的字典键 "Name" 来存储您的联系人。相反,将真实姓名作为字典的键,该键将保存另一个字典。例如:

    import pprint
    
    
    class PhoneBook:
        def __init__(self):
            self.contacts = {}
    
        def __str__(self):
            return pprint.pformat(self.contacts, width=30)
    
        def add(self, name, mobile=None, office=None, email=None):
            self.contacts[name] = {
                "Mobile": mobile,
                "Office": office,
                "Email": email,
            }
    
    
    obj = PhoneBook()
    obj.add("Kim", office="1234567", email="kim@company.com")
    obj.add("Park", office="2345678", email="park@company.com")
    print(obj)
    

    打印:

    {'Kim': {'Email': 'kim@company.com',
             'Mobile': None,
             'Office': '1234567'},
     'Park': {'Email': 'park@company.com',
              'Mobile': None,
              'Office': '2345678'}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多