继承初始化

2024-04-19 02:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

我做错什么了?
有别的方法初始化吗?
我试图在一个类中建立一个联系人,然后在我创建它之后,我将它添加到电话簿中。你知道吗


Tags: nameselfaddinitdefcontactphonethis
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

如果要将联系人添加到电话簿中,则需要某种方法来存储它们,因此构造函数不能为空。它需要一份清单

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

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

您已经创建了一个联系人对象,因此不需要在add函数中创建另一个联系人对象

相关问题 更多 >