一、继承和派生简介:
其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类。比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类。一个意思。此外python类似于C和C++支持多继承,一个类可以继承多个类,比如爸爸妈妈生了孩子,孩子继承了爸爸妈妈的属性和方法等等。此外由于python3中的所有类都是新式类,python2中也可以通过继承object来定义新式类,所以治理统一按照新式类的语法来介绍,为了兼容python2和python3,个人推荐一律使用新式类。
二、如何定义类的继承与多继承
1、定义类的继承与多继承
1.1继承
1 class person(object): 2 def __init__(self,name,age,gender,pid): 3 self.name = name 4 self.age = age 5 self.gender = gender 6 self.pid = pid 7 print("Create Person") 8 def showname(self): 9 print("Name:%s"%self.name) 10 11 class student(person): 12 def __init__(self,name,age,gender,pid,sid,level,school): 13 super(student,self).__init__(name,age,gender,pid) 14 self.sid = sid 15 self.level = level 16 self.school = school 17 print("Create Student") 18 19 def showsid(self): 20 print("StudentID:%s"%self.sid)
1.2多继承
1 class father(object): 2 def __init__(self,name,money): 3 self._fname = name 4 self.fmoney = money 5 6 class mother(object): 7 def __init__(self,name,money): 8 self._mname = name 9 self.mmoney = money 10 11 class baby(father,mother): 12 def __init__(self,n0,n1,n2,m1,m2,): 13 self.name = n0 14 father.__init__(self,n1,m1) 15 mother.__init__(self,n2,m2) 16 self.money = self.fmoney + self.mmoney
三、变量和属性的继承约束:
1、实例的属性与方法的继承要求:
#实例属性与方法的继承: """ 1、普通实例变量可以继承,保护实例(单下划线)变量可以继承,隐藏实例(双下划线)变量不可继承。 2、普通实例方法可以继承,保护实例(单下划线)方法可以继承,隐藏实例(双下划线)方法不可继承。 """
2、类的属性与方法的继承要求:
注:类变量是所有该类的实例和类本身的一个全局变量,类变量修改了,属性调用这个变量也随之修改了。而实例变量却是相互独立。类属性和方法,实例都可以调用。
#类属性与方法的继承: """ 1、普通类变量可以继承,保护类(单下划线)变量可以继承,隐藏类(双下划线)变量不可继承。 2、普通类方法可以继承,保护类(单下划线)方法可以继承,隐藏类(双下划线)方法不可继承。 """
3、静态方法的继承:
静态方法的继承约束与前两个完全相同,类和实例都可以调用。
4、对于父类的实例、类、静态方法或属性的调用:
继承之后可以直接调用,只要满足进程约束条件即可。
四、重载父类方法:
1、子类重载父类(类、实例、静态)方法后,子类和子类对象会按照新定义的(类、实例、静态)方法去执行。父类及其实例不变,保持原方法执行。
1 class person(object): 2 check = 0 3 def __init__(self,name,age,gender,pid): 4 self.name = name 5 self.age = age 6 self.gender = gender 7 self.pid = pid 8 print("Create Person") 9 @classmethod 10 def __showcheck(cls): 11 print(cls.check) 12 def showid(self): 13 print("PersonID:%s"%self.pid) 14 @staticmethod 15 def abcd(): 16 print "abcd" 17 18 class student(person): 19 def __init__(self,name,age,gender,pid,sid,level,school): 20 super(student,self).__init__(name,age,gender,pid) 21 self.sid = sid 22 self.level = level 23 self.school = school 24 print("Create Student") 25 26 def showid(self): 27 print "********************************" 28 print("PersonID:%s"%self.pid) 29 print("StudentID:%s"%self.sid) 30 print "********************************"