Python面向对象学习笔记——继承

Posted 归止于飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象学习笔记——继承相关的知识,希望对你有一定的参考价值。

一、基本继承

从技术上讲,所有的Python类都是一个叫做object的特殊类的子类。它提供了以双下划线开头的方法(仅内部使用),它使Python以同样的方式对待所有对象。

例如:

class MySubClass(object):
	pass

注意:在Python3中,如果我们不提供一个具体的父类,这个类就会自动从object继承。

父类,即是被继承的类;子类,一个从父类继承过来的类。
可以说,子类来源于父类,也可以说,子类扩展了父类。

例如,我们现在命名一个简单的“联系人列表”,且初始化所有联系人于姓名。

class Contact:
    all_contaction = []
    
    def __init__(self,name,email):
        self.name = name
        self.email = email
        Contact.all_contaction.append(self)

此时列表all_contaction是类定义的一部分,会被所有类的实例共享。这就意味着这里只有Contact.all_contaction这一个列表。

现在,我们可以添加一个order方法,此时将联系人当成供应商对待,

class Supplier(Contact):
    def order(self,order):
        print("If this were a real system we would send"" order to ".format(order,self.name))

二、扩展内置类

这种继承的应用就是给内置类增加功能。

例如:

class ContactList(list):
    def search(self,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)

在这里,我们创建了一个新的ContactList类来扩展Python内置的List,而不是实例化一个普通的列表作为我们的类变量。

三、重写和Super

继承适合给已经存在的类添加新的行为,假如需要改变行为,就需要重写__in__函数。
重写就是在子类里用一个(和超类相同的名字)新的方法来改变或者覆盖超类里的这个方法。

例如:

class Friend(Contact):
    def __init__(self, name, email, phone):
        super().__init__(name, email)
        self.phone = phone

四、多重继承

多重继承其实并不推荐使用。但是原则上讲它非常简单:一个从多个父类继承过来的子类,可以访问所有父类的功能。

多重继承的定义:

    class DerivedClassName(Base1, Base2, Base3):
    <statement-1>

    .

    .

    <statement-N>

以上是关于Python面向对象学习笔记——继承的主要内容,如果未能解决你的问题,请参考以下文章

Python面向对象学习笔记——继承

python基础学习笔记

Python 学习笔记 - 面向对象(基础)

Python学习笔记016——面向对象

python学习笔记之——python面向对象

Python学习笔记——基础篇第六周——面向对象