【python】面向对象之继承

  • 1.什么是继承?

    • 通过继承,我们可以从既有的类上衍生出新的类。如果程序的需求为仅修改或删除某项功能,此时不需要将该类的成员数据及成员函数重新写一遍,只需要“继承”原先已定义好的类就可以产生新的类了。
    • 继承是指将现有类的属性和行为,经过修改或重写(Override)之后,就可产生出拥有新功能的类,这样可以大幅提升程序代码的可重用性(Reusability)。
      -事实上,继承除了可重复利用之前开发过的类之外,最大的优势在于能够维持对象封装的特性。因为继承时不易改变已经设计完整的类,这样可以减少继承时类设计上的错误发生。
  • 2.基本使用


class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say(self):
        print("说话")

    def play(self):
        print("玩耍")

class Study(Person):
    # 子类如果有构造函数,必须先调用父类的构造函数
    def __init__(self,name,age,score):
        super().__init__(name,age)
        self.score = score

    def study(self):
        print("学习")

    def play(self):   # 代码重写,默认不继承父类中的play了
        # super().play()     # 执行父类中的f2方法,推荐使用
        Person.play(self)   # 执行父类中的f2方法,不推荐使用
        print('study.play')


s1 = Study('张三',18,88)
s1.say()
s1.play()
  • 3.多继承
    • python独有特性,java,C#等语言只有单继承

    • Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先

    • 当类是经典类时,多继承情况下,会按照深度优先方式查找

    • 当类是新式类时,多继承情况下,会按照广度优先方式查找

    • 经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

    • 经典类继承示例

class D:

    def bar(self):
        print 'D.bar'


class C(D):

    def bar(self):
        print 'C.bar'


class B(D):

    def bar(self):
        print 'B.bar'


class A(B, C):

    def bar(self):
        print 'A.bar'

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> D --> C
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
  • 新式类继承示例
class D(object):

    def bar(self):
        print 'D.bar'


class C(D):

    def bar(self):
        print 'C.bar'


class B(D):

    def bar(self):
        print 'B.bar'


class A(B, C):

    def bar(self):
        print 'A.bar'

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> C --> D
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
posted @ 2024-08-21 21:18  Tony_xiao  阅读(5)  评论(0编辑  收藏  举报