Python,为什么我们必须继承' list'类

时间:2017-04-16 23:04:16

标签: python oop inheritance

我正在学习面向对象的python并且遇到了这个问题,其中python强迫我继承内置的列表'要使用追加方法的类。

class ContactSearch(list):                  #Why inherit from 'list'?
    def search(self, name):
        matching_contact = []
        for contact in self:
            if name in contact.name:
                matching_contact.append(contact)
        return matching_contact

为什么我不能简单地声明一个空列表并附加到它?例如,它可以在以下代码中找到而不继承自' list class':

class Contact:
    all_contacts = []

    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

1 个答案:

答案 0 :(得分:0)

在ContactSearch中,matching_contact是搜索结果的临时变量。 ContactSearch的一个实例是列表。因此搜索方法可以在迭代器中使用self。搜索方法完成后matching_contact结束了。

在Contact中,all_contacts是类变量,Contact的所有实例都共享此变量。联系实例不是列表。但您可以使用类似Contact.all_contacts的方式访问所有联系人,是的,它是列表。

区别仅在于存储数据的位置。一个存储数据本身,另一个存储数据变量。