Almost0529 2023-10-08 21:51 采纳率: 100%
浏览 7
已结题

python子类继承父类同名类方法

python子类继承父类的类方法时,类方法用的return返回值,子类继承后调用返回的就是空值,而不是父类方法应有的返回值。我把return改成打印值,这样子类继承后调用返回的就不是空值了,这是为什么呀?


```就是下面这个代码
class father():
    def __init__(self):
        self.live = 8
    def speak(self):
        return 23
class son(father):
    def speak(self):
        super().speak()
a = father()
p = son()
print(a.speak())
print(p.speak())


```返回结果:
23
None

```把return改了后代码:
 class father():
    def __init__(self):
        self.live = 8
    def speak(self):
        print(23)
class son(father):
    def speak(self):
        super().speak()
a = father()
p = son()
a.speak()
p.speak()

```改后结果
23
23


  • 写回答

2条回答 默认 最新

  • 零之18 2023-10-08 22:33
    关注

    在你的代码中,问题出现在子类 sonspeak 方法中。在子类中,你调用了 super().speak(),但没有返回调用结果,因此子类的 speak 方法实际上返回了一个默认值,即 None。这是因为在 Python 中,如果一个函数或方法没有明确的 return 语句,它将隐式返回 None

    在第一个版本的代码中,父类的 speak 方法返回了 23,但子类的 speak 方法没有将这个值返回给调用者,而是只调用了父类的方法,但没有做任何返回操作,因此返回了 None

    在第二个版本的代码中,你在父类和子类的 speak 方法中使用了 print(23),这只是在打印出 23,而不是将其作为返回值返回。因此,两者的调用都会打印 23,但函数的返回值仍然是 None,因为没有明确的 return 语句。

    如果你想在子类中保留父类的返回值,你应该在子类的 speak 方法中添加 return 语句,如下所示:

    class father():
        def __init__(self):
            self.live = 8
        def speak(self):
            return 23
    
    class son(father):
        def speak(self):
            return super().speak()  # 返回父类的返回值
    
    a = father()
    p = son()
    print(a.speak())  # 输出 23
    print(p.speak())  # 输出 23
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 创建了问题 10月8日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址