一. 类的继承



继承,顾名思议就知道是它的意思,举个例子说明,你现在有一个现有的A类,现在需要写一个B类,但是B类是A类的特殊版,我们就可以使用继承,B类继承A类时,B类会自动获得A类的所有属性和方法,A类称为父类,B类称为子类,子类除了继承父类的所有属性和方法,还可以自定义自己的属性和方法。大大增加了代码的复用性。



在本章中,我们可以继承object 类,object类是所有类的父类,所有的类都默认继承object类,它是一个超级类,如果不写,默认继承object。



继承类的格式:



class A(父类):



。。。。



 



1》继承,格式



#/usr/bin/python



#coding=utf-8



#@Time :2017/11/6 9:25



#@Auther :liuzhenchuan



#@File :类的继承.py



# A类



class A(object):



pass



#继承,只要把A 写在B 的括号里就是继承,B继承A里边的方法,先去B找,B里边没有方法在去A找



class B(A):



pass



 



 



示例:



###子类继承。子类继承父类,从子类调用方法时,先从子类自己查找,如果子类自己有就调用自己的,如果子类没有在从父类调用那个



 



class parent(object):



name = 'parent'



sex = 'F'



def __init__(self):



print ('my name is {0}'.format(self.name))



def get_name(self):



return self.name



def get_sex(self):



return self.sex



print '##################打印父类方法##################'



a = parent()



print a.get_name()



print a.get_sex()



 



#定义子类child继承父类



class child(parent):



name = 'child'



age = '10'



 



#默认方法__init__()



def __init__(self):



print ('my name is {0}'.format(self.name))



 



#定义子类的方法,先从子类自己查找,子类有这个方法的话直接调用,没有的话去父类找



def get_age(self):



return self.age



 



#子类child 中没有get_sex 方法,从父类找



def get_sex(self):



return self.sex



 



#定义子类方法



def hello(self):



return 'hello world'



print '##################打印子类方法######################'



#实例化子类



b = child()



print b.get_age()



print b.get_sex()



print b.get_name()



print b.hello()



 



>>>



##################打印父类方法##################



my name is parent



parent



F



##################打印子类方法######################



my name is child



10



F



child



hello world



 



 



二.多继承



1》 python 的类支持多继承,而java没有多继承,但是可以有多接口的实现python的多继承很简单,下面我们来看一下多继承的格式:



class A: #定义类A



.....................



 



class B: #定义类B



 



 



class C(A,B): #继承类A和B



...............................



多继承其实需要在父类的位置,直接写多个父类就可以,然后用“,”分开就可以了,C 类就同时继承了A类和B类。



 



2》python 类的继承注意事项:



a. 在继承中,类的构造(__init__方法),不会自动调用,它需要在子类的构造中亲自调用。也就是子类需要自己写自己的__init()__方法。



 



b. python总是首先调用子类中的方法,如果 子类中没有找到,才回去父类中查找。



 



 



3》多继承格式



class A(object):



pass



#继承,只要把A 写在B 的括号里就是继承,B继承A里边的方法,先去B找,B里边没有方法在去A找



class B(object):



pass



#多继承,就是在C类里边写两个



class C(A,B):



pass



 



多继承实例:



1 class parent(object):
 2     name = 'parent'
 3     sex = 'F'
 4     coller = 'yellow'
 5     language = 'chinese'
 6     def __init__(self):
 7         print 'my name is {0}'.format(self.name)
 8     def get_sex(self):
 9         return self.name
10 a = parent()
11 a.get_sex()
12 print '#'*15
13 
14 class child(object):
15     name = 'child'
16     coller = 'yellow'
17     def __init__(self):
18         print 'my name is {0}'.format(self.name)
19     def get_coller(self):
20         return self.coller
21 b = child()
22 print b.get_coller()
23 print '#'*15
24 
25 class grandson(parent,child):
26     name = 'grandson'
27     def __init__(self):
28         print 'my name is {0}'.format(self.name)
29     def get_coller(self):
30         return self.coller
31     def get_language(self):
32         return self.language
33 c = grandson()
34 print c.get_coller()
35 print c.get_language()



运行如下:



>>>



my name is parent



###############



my name is child



yellow



###############



my name is grandson



yellow



chinese