【问题标题】:Inheritance Initialization继承初始化
【发布时间】:2018-07-21 20:17:44
【问题描述】:
Class Contact():
    def __init__(self, name, phone):
        self.obj1 = obj1
        self.obj2 = obj2

Class Phonebook():
    def __init__(self):
        # leave this empty for now

    def add(self, contact):
        contact = Contact()

contact1 = Contact('Name', '000')
a = Phonebook()
a.add(contact1)

我在这里做错了什么?
还有其他方法可以初始化吗?
我正在尝试在班级中建立联系,然后在创建之后将其添加到电话簿中。

【问题讨论】:

  • 这是组合,不是继承
  • 很难说你做错了什么,因为你没有说出你期望发生什么或它实际上在做什么。

标签: python python-3.x class inheritance


【解决方案1】:

如果要将联系人添加到电话簿中,则需要某种方式来存储它们,因此您的构造函数不能为空。它需要一个列表

class Phonebook():
    def __init__(self):
        self.items = [] 

    def add(self, contact):
        self.items.append(contact)

你已经创建了一个Contact对象,所以你不需要在add函数中再创建一个

【讨论】:

    【解决方案2】:

    此代码存在许多问题。


    首先,正如 Azat Ibrakov 所指出的,Class 不是一个有效的关键字;你想要class

    虽然我们这样做了,虽然class Contact(): 有效,但空括号确实没有理由。

    所以:

    class Contact:
    

    接下来,Contact.__init__ 尝试使用不存在的名为 obj1obj2 的变量,这将失败并返回 NameError

    它还采用名为 namephone 的参数,但从不使用它们。大概这些是您想要存储的值。

    此外,虽然这不是错误,但将姓名和电话号码存储在名为 obj1obj2 的属性中并不是很有用;给他们有意义的属性名称。

    所以:

    class Contact:
        def __init__(self, name, phone):
            self.name = name
            self.phone = phone
    

    接下来,Phonebook.add 尝试创建一个新的Contact,但没有为namephone 传递参数,因此将失败并返回TypeError

    但是你应该传递什么参数呢?你没有名字,也没有电话号码。

    确实有一个contact 参数。您试图丢弃该值并将其替换为全新的 Contact 对象,但您为什么要这样做?你肯定想使用传入的那个。

    所以,要修复 Phonebook.add... 真的没什么可做的:

    class Phonebook:
        def __init__(self):
            # leave this empty for now
    
        def add(self, contact):
            # leave this empty too
    

    但您的目标是将联系人添加到电话簿。这意味着您必须将这些联系人存储在某个地方。

    电话簿就像字典,您可以在其中按姓名查找联系信息。所以,让我们使用dict。这应该是Phonebook对象的一个​​属性,也就是说我们要在__init__中创建它,这样我们以后可以在add等其他方法中使用它:

    class Phonebook:
        def __init__(self):
            self.contacts = {}
    
        def add(self, contact):
            self.contacts[contact.name] = contact
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多