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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值