关于python:Python面向对象中2种重写父类的方法

7次阅读

共计 1665 个字符,预计需要花费 5 分钟才能阅读完成。

应用面向对象继承开发时常常会遇到的一种状况,重写。

继承:

  1. 子类领有父类的所有属性和办法。
  2. 子类继承自父类,乐意间接享受父类中曾经封装好的办法,不须要再次开发。

利用场景:

当父类的办法实现不能满足子类需要时,能够对办法进行重写(override)

尽管 Dog 类中有叫唤的办法,如果因为哮天犬是神犬和一般狗狗叫唤形式不一样,所以 Dog 类中的 Dark 办法满足不了,这时就要对这个 dark 办法重写了。

重写父类办法有 2 种状况:

笼罩父类的办法
对父类办法进行扩大

一、笼罩父类的办法

如果在开发中,父类的办法实现和子类的办法实现齐全不同,就能够应用笼罩的形式,在子类中从新编写父类的办法实现。

具体的实现形式:

就相当于在子类中定义了一个和父类同名的办法并且实现,重写之后,在运行时,只会调用子类中重写的办法,而不再会调用父类封装的办法。

代码体验:

class Animal():
    def eat(self):
        print("吃")

    def run(self):
        print("跑")

    def drink(self):
        print("喝")

    def sleep(self):
        print("睡")


class Dog(Animal):

    def bark(self):
        print("汪汪叫")


class XiaoTianQuan(Dog):

    def fly(self):
        print("老子会飞,哈哈哈哈")

    def bark(self):
        print("天籁之音")

# 创立一个哮天犬对象
xtq = XiaoTianQuan()

# 如果子类中重写了父类办法
# 在应用子类对象调用办法时,会调用子类中重写的办法
xtq.bark()

执行后果:

留神:如果在 XiaoTianQuan 类中没有从新编写 bark 办法,那么执行后果是汪汪叫,因为此时调用的仍旧是父类中的 bark 办法。

二、对父类办法进行扩大

如果在开发中,子类的办法实现中蕴含父类的办法实现,父类本来封装的办法实现是子类办法的一部分,就能够应用扩大的形式。

1. 扩大的形式步骤:

在子类中重写父类的办法
在须要的地位应用 super(). 父类办法 来调用父类办法的执行
代码其余的地位针对子类的需要,编写子类特有的代码实现

2. 对于 super

在 python 中 super 是一个非凡的类
super()就是应用 super 类创立进去的对象
最常应用的场景就是,在重写父类办法时,让 super(). 调用在父类中封装的办法实现

代码体验:

性能需要:不仅要会汪汪叫,还要会天籁之音。


class Animal():
    def eat(self):
        print("吃")

    def run(self):
        print("跑")

    def drink(self):
        print("喝")

    def sleep(self):
        print("睡")


class Dog(Animal):

    def bark(self):
        print("汪汪叫")


class XiaoTianQuan(Dog):

    def fly(self):
        print("老子会飞,哈哈哈哈")

    def bark(self):
        # 1. 针对子类特有的需要,编写代码
        print("天籁之音")

        # 2. 应用 super(). 调用本来在父类中封装的办法
        super().bark()

        # 3. 减少其余子类的代码
        print("OK 啦 OK 啦 OK 啦 OK 啦")

# 创立一个哮天犬对象
xtq = XiaoTianQuan()

xtq.bark()

![](/img/bVc2gBa)

执行后果:

3. 调用父类办法的另外一种形式(晓得)

在 python2.0 时,如果须要调用父类的办法,还能够应用以下形式:

父类名. 办法(self)

这种形式目前在 python3.x 还反对这种形式

这种办法不举荐应用,因为一旦父类产生过变动,办法调用地位的类名同样须要批改

提醒:

在开发时,父类名 和 super( ) 两种办法不要混用
如果应用以后子类名 调用办法,会造成递归调用,呈现死循环

代码体验:批改局部 + 留神局部

欢送关注博主或 返回『Python 自学网』www.wakey.com.cn/,从根底入门收费课程开始,逐渐深刻学习 python 全栈体系课程,适宜新手入门到精通全栈开发。

正文完
 0