我不熟悉Python中的面向对象程序设计( OOP ),并致力于继承概念。我偶然发现了以下代码:
class ContactList(list):
def search(self, name):
'''Return all contacts that contain the search value in their name.'''
matching_contacts = []
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
return matching_contacts
class Contact:
all_contacts = ContactList()
def __init__(self, name, email):
self.name = name
self.email = email
self.all_contacts.append(self)我想知道为什么我们要使用self.all_contacts.append(self),以及for contact in self是如何工作的?如果我正确理解,self将指定到类(对象)的实例,并将其附加到列表中,这对我来说并不简单。
发布于 2018-06-29 16:12:40
基本上,您创建了一个Contact列表,并在self后添加了all_contacts列表中的当前联系人。
关于你们的问题,
我想知道为什么我们要使用self.all_contacts.append(self)
我们使用它是因为all_contacts是一个类变量,这意味着列表将在所有Contact实例之间共享。
for contact in self是如何工作的?
正如您所说的,由于self表示当前实例,调用for contact in self允许您在当前联系人列表上进行迭代。
换句话说,您的代码示例允许您创建附加在类变量(shared)中的Contact实例。现在,通过提供继承自ContactList的list类,它们允许您使用已实现的search方法,该方法将根据搜索筛选器返回另一个Contact列表。
https://stackoverflow.com/questions/51105738
复制相似问题