python对象的多重继承

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。
多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。
  1. class ContactList(list):
  2.     def search(self, name):
  3.         '''Return all contacts that contain the search value
  4.            in their name.'''
  5.         matching_contacts = []
  6.         for contact in self:
  7.             if name in contact.name:
  8.                 matching_contacts.append(contact)
  9.         return matching_contacts
  10. class Contact:
  11.     all_contacts = ContactList()
  12.   
  13.     def __init__(self, name, email):
  14.         self.name = name
  15.         self.email = email
  16.         Contact.all_contacts.append(self)
  17. class MailSender:
  18.     def send_mail(self, message):
  19.         print("Sending mail to " + self.email)
  20.         # 这里添加发送邮件逻辑
  21.                 # Python小白学习交流群:711312441
  22. class EmailableContact(Contact, MailSender):
  23.     pass
复制代码
EmailableContact这个类不做任何特别的事(实际上,它仅仅是起到一个独立的类的作用),但是通过多重继承,他允许我们定义一个新的类,这个类既是Contact又是MailSender。
多重继承的语法就像定义里的参数列表,括号里可以包含两个(或者更多的)基类而不是一个,这些基类使用逗号分隔开。
执行如下:
  1. >>> e = EmailableContact("John Smith", "jsmith@example.net")
  2. >>> Contact.all_contacts
  3. [<__main__.EmailableContact object at 0x10ae49128>]
  4. >>> [c.name for c in Contact.all_contacts]
  5. ['John Smith']
  6. >>> e.send_mail("Hello, test e-mail here")
  7. Sending mail to jsmith@example.net
复制代码
Contact类的初始化函数仍然会把一个新的联系人添加到all_contacts这个列表。并且可以发送给件给self.email。
当混合不同类的方法时,多重继承可以很好的工作,但是,当我们要调用超类的方法时,这将会变得非常混乱。因为这里有多个父类,你怎么知道调用哪个呢?如何知道调用他们的顺序呢?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表