You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类继承实现算术表达式出现NoneType运算错误如何解决

问题解决方案

报错根因

  • 核心错误出在Zmienna类的逻辑设计:你在初始化时传入了变量名klucz,但没有将该值赋值给实例的zmienna属性,导致zmienna始终保持类属性的默认空值""
  • 调用Zmienna.Oblicz()方法时,self.slownik.get(self.zmienna)查询空字符串对应的取值,返回None,后续运算时出现None和整数计算的类型错误
  • 额外问题:Zmienna的slownik设为类属性会导致所有变量实例共享同一个字典,不同变量实例的取值会互相干扰,不符合变量独立存储的设计预期;Operator类提前声明的类属性w1、w2无实际作用,属于Java写法迁移到Python的冗余代码

修正后的代码

from abc import ABC, abstractmethod

class Wyrazenie(ABC):
    @abstractmethod
    def Oblicz(self):
        pass


class Operator(Wyrazenie):
    def __init__(self, wy1, wy2):
        self.w1 = wy1
        self.w2 = wy2


class Zmienna(Wyrazenie):
    def __init__(self, klucz, wartosc):
        self.zmienna = klucz
        self.wartosc = wartosc

    def Oblicz(self):
        return self.wartosc


class Stala(Wyrazenie):
    def __init__(self, wartosc1):
        self.wartosc = wartosc1

    def Oblicz(self):
        return self.wartosc


class Dodaj(Operator):
    def __init__(self, wy1=None, wy2=None):
        super().__init__(wy1, wy2)

    def Oblicz(self) -> int:
        return self.w1.Oblicz() + self.w2.Oblicz()


class Odejmij(Operator):
    def __init__(self, wy1=None, wy2=None):
        super().__init__(wy1,wy2)

    def Oblicz(self) -> int:
        return self.w1.Oblicz() - self.w2.Oblicz()


class Pomnoz(Operator):
    def __init__(self, wy1=None, wy2=None):
        super().__init__(wy1,wy2)

    def Oblicz(self) -> int:
        return self.w1.Oblicz() * self.w2.Oblicz()


class Podziel(Operator):
    def __init__(self, wy1=None, wy2=None):
        super().__init__(wy1,wy2)

    def Oblicz(self) -> int:
        return self.w1.Oblicz() / self.w2.Oblicz()


z1=Zmienna("x", 4)
z2=Zmienna("y", 10)

# 4 * 10 + 10 - 5 = 45
wyr = Dodaj(Pomnoz(z1, Stala(10)), Odejmij(z2, Stala(5)))

print("Wartosc wyrazenia=   \n")
print(wyr.Oblicz())

验证结果

运行修正后的代码,会输出预期结果45,表达式计算逻辑正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:03