You need to enable JavaScript to run this app. Python面向对象中子类调用方法执行减法返回None的问题
优惠活动
大模型
产品
解决方案
定价
更多

Python面向对象中子类调用方法执行减法返回None的问题

子类结构下减法运算返回None的问题排查与修复

核心故障定位

返回值为None且全程无运行报错,本质是decide()方法没有命中任何有效返回分支,和子类的继承实现没有关系:

  • 程序中通过input()获取的用户选项是字符串类型,但Calc_1类的decide方法是和整数类型的1、2做相等判断。比如你输入选项2,实际传入方法的是字符串"2",和整数2永远无法匹配,两个判断分支都不会执行。
  • Python中所有未显式执行return语句的函数,会默认返回None,这就是结果始终为None的直接原因。
  • 你的子类Calc_2的继承逻辑本身没有问题:通过super()正确调用了父类构造方法,完整继承了父类的add、subtract、decide方法,不存在属性丢失、方法重写异常的问题,完全不需要在子类里重新实现减法逻辑。很多开发者遇到这个问题会误以为是子类继承失效,跑去子类里重写减法方法,其实属于无效修改,父类已经实现了可正常运行的减法逻辑。

针对性修复方案

1. 修正分支判断的类型匹配问题

在decide方法内部对传入的选择值做类型转换,兼容字符串输入的场景,确保分支判断能正常命中:

def decide(self, choice):
    # 统一将输入的选项转成整数再判断
    choice = int(choice)
    if choice == 1:
        return self.add()
    if choice == 2:
        return self.subtract()

2. 补全分支兜底逻辑

将独立的if判断调整为if-elif结构,增加异常分支处理,从根源上避免漏走返回分支导致返回None:

def decide(self, choice):
    choice = int(choice)
    if choice == 1:
        return self.add()
    elif choice == 2:
        return self.subtract()
    elif choice == 3:
        return math.cos(self.num1)
    elif choice == 4:
        return math.sin(self.num1)
    else:
        print("无效计算选项")
        return None

3. 修正输出格式的硬编码问题

当前的print语句硬编码了"{} - {} = "的减法格式,就算用户选了加法、余弦计算,输出文案也和实际计算不匹配。可以在decide方法中同步返回计算对应的符号,动态调整输出内容。

修复后可正常运行的参考代码

import math

class Calc_1:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

    def add(self):
        return self.num1 + self.num2

    def subtract(self):
        return self.num1 - self.num2

    def decide(self, choice):
        choice = int(choice)
        if choice == 1:
            return self.add(), "+"
        elif choice == 2:
            return self.subtract(), "-"
        elif choice == 3:
            return math.cos(self.num1), "cos"
        elif choice == 4:
            return math.sin(self.num1), "sin"
        else:
            return None, "无效选项"

class Calc_2(Calc_1): 
    def __init__(self, num1=None, num2=None):  
        super().__init__(num1, num2)

print("1. Add multiple numbers")
print("2. Subtraction")
print("3. Find Cosine")
print("4. Find Sine")
print("5. Quit","\n")

choice = input("Please make your choice: ")
print()

if int(choice) == 5:
    print("程序退出")
    exit()

a = float(input("Enter first num: "))
b = float(input("Enter second num: "))

calc = Calc_2(a,b)
result, op = calc.decide(choice)

if op in ["cos", "sin"]:
    print(f"{op}({calc.num1}) = ", result)
else:
    print (f"{calc.num1} {op} {calc.num2} = ", result)

内容的提问来源于stack exchange,提问作者Krys Tof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 23:06:00