Python 重写父类方法后,如何继承父类中被覆盖的方法__使用super函数

当子类重写父类方法后,调用父类被覆盖的方法可通过未绑定的父类方法或super函数实现。本文通过实例说明了这两种方式,推荐使用super函数,因其自动找到基类方法并传递self参数,更适应于多重继承场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

子类如果重写了父类的方法,就会把父类的方法覆盖。那么,在这种情况下如何才能调用被覆盖的父类方法呢?

解决方案

此时若想调用父类中的方法,有两种方案可以达成。

1.调用未绑定的父类方法

2.使用super函数,也就是我们今天要讲的重点

实例说明

举个例子,首先来看一下代码

class Fish:
	def _init_(self):
        #坐标取0到10之间的随机数
        self.x = r.randint(0,10)
        self.y = r.randint(0,10)
     def move(self):
        self.x -= 1
        print("我的位置是:",self.x,self.y)

#Shark类继承自Fish类 
class Shark(Fish)def _init_(self):
        self.hungry = True
        
    def eat(self):
        if self.hungry:
            print("吃货的梦想就是天天有的吃^_^"")
            self.hungry = False   
         else:
            print("太撑了,吃不下了")      

可以看到此时代码中子类Shark重写了父类Fish中的初始化方法,那么move方法就应该可以正常继承过来,但是当运行shark.move()时也会报错(这里shark是Shark类的实例)。这是为什么呢?

其实是因为move方法中包含x变量,由于覆盖了父类中的初始化方法,Shark类初始化时没有x变量而导致的。

好了,下面就是解决方案的实例

  • 调用未绑定的父类方法

在Shark类的初始化方法中多加一行Fish._init_(self)即可。如下所示。

def _init_(self)
	Fish._init_(self)
    self.hungry = True

Fish._init_(self)括号中的self为子类Shark的实例对象,并没有绑定父类,所以叫它是未绑定的父类方法。

  • 使用super函数

在Shark类的初始化方法中多加一行super()._init_()即可,连self参数都可以不用传入。如下所示。

def _init_(self)
	super()._init_()
    self.hungry = True

总结

这两种方法中,相较之下,super函数更好用

super函数可以自动帮我们找到基类的方法,并且会为我们传入self参数。

super函数超级之处,就是在于不用给定任何基类的名字,在多重继承时,可以自动帮你一层层找出所有基类里面对应的方法。

由于不用给定任何基类的名字,所以在需要改变类的继承关系时,只需要修改括号里父类的名字就可以了。

补充一句:多重继承(一个类同时继承多个类)容易导致代码混乱,当不确定必须要使用多重继承的语法时,请尽量避免使用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值