Python类的派生与继承

来自CloudWiki
跳转至: 导航搜索

派生与继承

继承就是子类继承父类的特征和行为,使得代码能够复用;

声明继承之后,子类(派生类)就可以使用父类所有的变量和方法;

如果有变量和方法父类当中不存在,子类可以自己定义。

定义一个学生类Student,包含姓名name,性别gender,年龄age,还包含所学专业major,所在系别dept,那么就不必要重新定义Student类,只要从已经定义的Person类派生与继承过来就是了。

例如:

Person类

class Person:
    def __init__(self,name,gender,age):
        self.name=name
        self.gender=gender
        self.age=age
 
    def show(self,end='\n'):
        print(self.name,self.gender,self.age,end=end)

Student类

class Student(Person):
    def __init__(self,name,gender,age,major,dept):
        Person.__init__(self,name,gender,age)
        self.major=major
        self.dept=dept
 

if __name__ =="__main__":  
    s=Student("james","male",20,"software","computer")
    s.show()


继承类构造函数

从上面的Student类的定义可以看出派生类的构造函数除了要完成自己的新增加的major,dept属性的初始化外,还要调用基类Person的构造函数,而且还要显示调用,即:

    Person.__init__(self,name,gender,age)

通过类名称Person直接调用Person的__init__函数,并提供所要的4个参数。继承类是不会自动调用基类的构造函数的,必须显示调用。

在python中继承中的一些特点:

  • 在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
  • 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
  • Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)