我在使用更广泛的python脚本中的运算符方法时遇到问题。为了缩小这个问题,我创建了下面的示例代码。尝试在Python中使用运算符方法时出现类型错误
class Car:
def __init__(self, Name, Speed):
self.Name = Name
self.Speed = Speed
self.PrintText()
def PrintText(self):
print("My %s runs %s km/h." % (self.Name, self.Speed))
def GetName(self):
return self.Name
def GetSpeed(self):
return self.Speed
def __sub__(self, other):
try: # Try with assumption that we have to deal with an instance of AnotherClass
a = self.GetSpeed()
except: # If it doesn't work let's assume we have to deal with a float
a = self
try: # Try with assumption that we have to deal with an instance of AnotherClass
b = other.GetSpeed()
except: # If it doesn't work let's assume we have to deal with a float
b = other
return a - b
Car1 = Car("VW", 200.0)
Car2 = Car("Trabant", 120.0)
print("")
Difference = Car1 - Car2
print("The speed difference is %g km/h." % Difference)
print("")
Difference = Car2 - 6.0
print("My %s is %g km/h faster than a pedestrian." % (Car2.GetName(), Difference))
print("")
Difference = 250.0 - Car1
print("I wish I had a car that is %g km/h faster than the %s." % (Difference, Car1.GetName()))
输出为:
My VW runs 200.0 km/h.
My Trabant runs 120.0 km/h.
The speed difference is 80 km/h.
My Trabant is 114 km/h faster than a pedestrian.
Traceback (most recent call last):
File "test.py", line 41, in <module>
Difference = 250.0 - Car1
TypeError: unsupported operand type(s) for -: 'float' and 'instance'
我怎么能解决时出现的第一个对象是一个浮动的问题?
你需要'__rsub__' –
下面的答案是正确的。我只是想提供建议。您可以使用'__str__'方法代替PrintText函数。然后你可以像这样输入:'print(Car)' – Nuchimik