python的类继承与派生

一、继承和派生简介:

  其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类。比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类。一个意思。此外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 "********************************"
原文地址:https://www.cnblogs.com/KevinGeorge/p/8527548.html