【发布时间】:2021-12-28 00:40:51
【问题描述】:
我在使用算术表达式实现简单的类层次结构时遇到问题。
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
其他运算,加法,减法,除法等也是如此。
我的代码:
from abc import ABC, abstractmethod
class Wyrazenie(ABC):
# @abstractmethod
def Oblicz(self):
pass
class Operator(Wyrazenie):
w1 = Wyrazenie()
w2 = Wyrazenie()
def __init__(self, wy1, wy2):
self.w1 = wy1
self.w2 = wy2
#def Oblicz(self) -> int:
# pass
class Zmienna(Wyrazenie):
zmienna=""
slownik={}
def __init__(self, klucz, wartosc):
self.slownik.update({klucz: wartosc})
def Oblicz(self):
return self.slownik.get(self.zmienna)
class Stala(Wyrazenie):
wartosc=0
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)))
wyr.Oblicz()
print("Wartosc wyrazenia= \n")
print(wyr.Oblicz())
我不知道用None 初始化wy1、wy2 是否存在问题,或者表示此类表达式的完全错误的想法。我试图从我的 Java 类中重写它。
【问题讨论】:
标签: python abstract-class multiple-inheritance abstract-methods