Python运算符重载

时间:2015-11-15 12:38:53

标签: python operators overloading typeerror

我在Python中重载添加运算符时遇到问题。 每次我试着超载它我得到:

TypeError: __init__() takes exactly 3 arguments (2 given)

这是我的代码:

class Car:
    carCount = 0

    def __init__(self,brand,cost):
        self.brand = brand
        self.cost = cost
        Car.carCount +=1
    def displayCount(self):
        print "Number of cars: %d" % Car.carCount
    def __str__(self):
        return 'Brand: %r   Cost: %d' % (self.brand, self.cost)
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name,'destroyed'
    def __add__(self,other):
        return Car(self.cost+other.cost)


c=Car("Honda",10000)
d=Car("BMW",20000)
print c
a= c+d

2 个答案:

答案 0 :(得分:2)

问题是,您的__init__需要三个参数(包括self),而您在__add__方法中只提供了两个参数,因此TypeError__init__ }}:

TypeError: __init__() takes exactly 3 arguments (2 given)

所以在你的__add__中,你应该添加{没有双关语意图} brand参数:

def __add__(self, other):
    return Car(self.brand+other.brand, self.cost+other.cost)

所以在这种情况下你会得到"Honda BMW",这可能不是你想要的。

无论哪种方式,我相信你现在都能理解错误,并且你会修复它以获得你想要的功能。

答案 1 :(得分:1)

__add__方法中,你应该传递两个参数; brand遗失:

def __add__(self,other):
    return Car('', self.cost+other.cost)
    #          ^^