我正在学习面向对象的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)
答案 0 :(得分:0)
在ContactSearch中,matching_contact
是搜索结果的临时变量。 ContactSearch的一个实例是列表。因此搜索方法可以在迭代器中使用self
。搜索方法完成后matching_contact
结束了。
在Contact中,all_contacts
是类变量,Contact的所有实例都共享此变量。联系实例不是列表。但您可以使用类似Contact.all_contacts
的方式访问所有联系人,是的,它是列表。
区别仅在于存储数据的位置。一个存储数据本身,另一个存储数据变量。