继承是面向对象的一个基本准则,继承允许我们在两个或者更多的类之间创建一种关系。
基本继承
从技术上将,每一个Python类的创建都是用了继承,所有的类都是一个叫做object的特殊类的子类。不具体指明的时候,自动继承过来。当然,亦可以通过下面的方式现实的从object类继承。class MyClass(object):
语法:
在定义一个新的类的时候,在类名的括号里面包含父类的名字就可以了。这样,这个新定义的类,就可以实现父类的功能。
扩展内置类
例如,我们想要把联系人添加到列表里。同时西门想通过名字实现搜索。那么我们需要给列表添加一个搜索功能。例如,下面把list这个内置类扩展了,添加了搜索功能。
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
self.all_contacts.append(self)
重写方法
当我们通过继承父类可以实现很多功能,但是当我们想要改变其中的一些功能的时候,就可以通过重写来实现。
重写和其他语言里面是差不多的。在子类里面有一个与父类名字相同的方法来覆盖父类的这个方法。例如,通过重写初始化函数,增加一个电话号码属性。
class Friend(Contact):
def __init__(self,name email,phone):
self.name = name
self.email = email
self.phone = phone
多重继承
从多个父类继承。可以访问所有父类的功能。但是通常 不推荐使用。
多态
多态,即有多种形态。这意味着即便不知道变量指向的是哪种对象,也能够对其执行操作,且操作将随着对象的类型变化而变化。
通常,没一个类型都会自己定义对应的方法。例如,在C++中,vector,string,queue等等的STL类,都自己定义了size()这个功能,我们在使用的时候,无需知道对象到底是什么,他们都可以直接使用这个方法。
在python中也是一样的道理。不同的类都自己定义对应的方法。