Python继承的特点与优点:代码复用、减少代码量及初始化父类方法详解

python继承的特点:

Python继承的特点与优点:代码复用、减少代码量及初始化父类方法详解

总是从某个类继承。

如果没有继承类,则继承自基类object类

python继承的优点:

实现代码复用,减少代码量;

拥有父类的所有功能,只需要编写子类附加的功能即可。

python继承类

Student 类需要具备 name 属性和 gender 属性。因为 Person 类中已经包含了这些属性,所以 Student 类可以直接继承。此外,还需要新增一个 score 属性。

class Person(object):
初始化自身,传入姓名和性别这两个参数。 其中,姓名作为一个参数传入。 性别也作为一个参数传入。 这两个参数用于初始化自身的相关属性或状态。
        self.name = name
        self.gender = gender
class Student(Person):
self 的初始化函数接收三个参数,分别是 name、gender 和 score。
        Student 的父类的初始化方法被调用,传入了 name 和 gender 两个参数。具体来说,是调用了 super(Student, self) 的 __init__ 方法,并将 name 和 gender 作为参数传递进去。
        self.score = score

继承类时需使用 super(子类名, self).__init__(子类需继承父类的参数)来初始化父类。若不这样做,继承父类的子类就不会有 name 和 gender。

super(子类名,self)会返回当前类所继承的父类。接着会调用__init__方法。在这个时候,__init__方法不需要再传递 self 参数了,因为在使用 super 时已经传入了。

父类与子类类型

子类类型能够向上转型并被视为父类类型;父类类型不能向下转型并被视为子类类型,原因是子类类型具备一些自身特有的属性和方法。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
class Student(Person):
    def __init__(self, name, gender, score):
调用父类 Student 的构造函数,并传入参数 name 和 gender ,即 self 所代表的对象调用父类的初始化方法。
        self.score = score
class Teacher(Person):
初始化自身,传入姓名、性别和课程这三个参数。它会将传入的姓名赋值给自身的某个属性,将性别赋值给另一个属性,将课程赋值给再一个属性。
Teacher 类的父类的构造函数被调用,传入了参数 name 和 gender ,同时 self 也被传递进去了。
        self.course = course
创建了一个名为 t 的 Teacher 对象,其姓名为 'Alice',性别为 'Female',教授科目为 'English'。
创建了一个名为 p 的 Person 对象,其名字为“Tim”,性别为“Male”。
打印 isinstance(t, Person) ,结果为 True 。
判断 t 是否为 Student 类型,结果为 False 。 即打印出 t 属于 Student 类型这一判断的结果为 False 。
打印 isinstance(t, Teacher) ,其结果为 True 。
打印 isinstance(t, object) ,结果为 True 。
判断 p 是否是 Student 类型,结果为 False 。  # 打印出 p 与 Student 类型的比较结果,此结果为 False 。  # 检查 p 的类型是否为 Student ,结果显示为 False 。
打印 isinstance(p, Teacher) 的结果,其值为 False。

方法重写

如果一个方法在子类中被定义,且它的名称、返回类型以及参数列表恰好与父类中某一个方法的名称、返回类型以及参数列表相契合,那么就可以表明,子类的这个方法对父类的方法进行了重写。

方法重写在不同类,是实现多态的必要条件。

python多态

(关于多态的内容,本人理解的有偏差)

多态性是以继承为基础的。从一个父类中派生出多个子类,这样就能让子类之间呈现出不同的行为,而这种不同的行为就被称作多态。直白地讲,就是子类对父类的方法进行重写,从而使子类拥有不同的方法实现。

子类和父类拥有同一个方法,子类的方法优先级比父类高,意味着子类覆盖了父类。只要有这个方法,并且参数正确,就能够进行调用。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def whoAmI(self):
返回 '我是一个人,我的名字是 %s' % self.name
class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
    def whoAmI(self):
我是一名学生,我的名字是 self.name ,返回的是 'I am a Student, my name is %s' % self.name 这句话
创建了一个名为 p 的 Person 对象,其姓名为'Tim',性别为'Male'。
创建了一个名为 s 的学生对象,其姓名为“Bob”,性别为“Male”,成绩为 88 。

方法调用会作用于 x 的实际类型。s 属于 Student 类型,它自身拥有 whoAmI()方法,同时也从 Person 类继承了 whoAmI 方法。当调用 s.whoAmI()时,总是会先在 s 自身去查找其定义,如果 s 自身没有定义该方法,就会沿着继承链向上查找,一直找到某个父类中存在该方法为止。这就是所谓的多态。

python 存在多重继承这种特性。其目的在于能够从两种不同的继承树当中,分别挑选出所需的部分并将其继承下来,从而让子类可以组合各种功能并加以使用。

class A(object):
    def __init__(self, a):
        print 'init A...'
        self.a = a
class B(A):
    def __init__(self, a):
        super(B, self).__init__(a)
        print 'init B...'
class C(A):
    def __init__(self, a):
        super(C, self).__init__(a)
        print 'init C...'
class D(B, C):
    def __init__(self, a):
        super(D, self).__init__(a)
        print 'init D...'

D继承自 B 且继承自 C,B 继承自 A,C 也继承自 A,所以 D 具备了 A、B 和 C 的全部功能。倘若不存在多重继承,那么就必须在 D 中写入 A、B、C 的所有功能。

继承、方法重写和多态之间存在着紧密的联系,需要对它们之间的关系有深刻的理解,同时也需要持续地进行实践。

有误望大家积极指正我哦~~

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读