python对象的多重继承

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。python对象的多重继承,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。

多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。

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
        Contact.all_contacts.append(self)

class MailSender:
    def send_mail(self, message):
        print("Sending mail to " + self.email)
        # 这里添加发送邮件逻辑
		# Python小白学习交流群:711312441
class EmailableContact(Contact, MailSender):
    pass

EmailableContact这个类不做任何特别的事(实际上,它仅仅是起到一个独立的类的作用),但是通过多重继承,他允许我们定义一个新的类,这个类既是Contact又是MailSender。

多重继承的语法就像定义里的参数列表,括号里可以包含两个(或者更多的)基类而不是一个,这些基类使用逗号分隔开。

执行如下:

>>> e = EmailableContact("John Smith", "jsmith@example.net")
>>> Contact.all_contacts
[<__main__.EmailableContact object at 0x10ae49128>]
>>> [c.name for c in Contact.all_contacts]
['John Smith']
>>> e.send_mail("Hello, test e-mail here")
Sending mail to jsmith@example.net

Contact类的初始化函数仍然会把一个新的联系人添加到all_contacts这个列表。并且可以发送给件给self.email。

当混合不同类的方法时,多重继承可以很好的工作,但是,当我们要调用超类的方法时,这将会变得非常混乱。因为这里有多个父类,你怎么知道调用哪个呢?如何知道调用他们的顺序呢?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/213531.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!