调用类的方法时的TypeError

时间:2014-12-23 17:35:53

标签: python class

class Product(object):

 def __init__(self, ind, name, price, quantity):

    self.ind = ind
    self.name = name
    self.price = price
    self.quantity = quantity


 inventory = list()


 def add(self):


    inventory.append(Product(self.ind))
    inventory.append(Product(self.name))
    inventory.append(Product(self.price))
    inventory.append(Product(self.quantity))
    print('product %s added')%name

Product.add(63456, 'Meow', 60.00, 0)

我仍然收到错误:

  Product.add(63456, 'Meow', 60.00, 0)
TypeError: unbound method add() must be called with Product instance as first argument (got int instance instead)

我不知道这有什么问题,因为我刚开始学习课程。

需要改变什么?

2 个答案:

答案 0 :(得分:0)

您正在调用该方法,就好像它是一个静态方法一样。这是一个实例方法。您需要创建Product的实例,然后在该实例上调用该方法。

my_product = Product(63456, 'Meow', 60.00, 0)
my_product.add()

答案 1 :(得分:0)

您的方法调用错误。你应该用对象引用来调用它。还有一件事你需要将列表定义为全局,那么只有你能够追加下一个元素。否则会给出 NameError:全局名称'inventory'未定义错误。 试试这个:

class Product(object):

    def __init__(self, ind, name, price, quantity):
        self.ind = ind
        self.name = name
        self.price = price
        self.quantity = quantity        

    global inventory
    inventory = []

    def add(self):
        inventory.append(self.ind)
        inventory.append(self.name)
        inventory.append(self.price)
        inventory.append(self.quantity)
        print('product %s added')% self.name

obj = Product(63456, 'Meow', 60.00, 0)
obj.add()

或者如果您想为每个对象分别设置清单副本,请将清单定义为self.inventory = [] 因此,您的代码将类似于:

class Product(object):

    def __init__(self, ind, name, price, quantity):
        self.ind = ind
        self.name = name
        self.price = price
        self.quantity = quantity        
        self.inventory = []


    def add(self):
        self.inventory.append(self.ind)
        self.inventory.append(self.name)
        self.inventory.append(self.price)
        self.inventory.append(self.quantity)
        print('product %s added')% self.name

obj = Product(63456, 'Meow', 60.00, 0)
obj.add()