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面向对象学习笔记——继承的主要内容,如果未能解决你的问题,请参考以下文章