传入的字符串表示有两个参数

时间:2012-06-06 21:59:56

标签: python integer arguments parameter-passing add

我正在写的一个函数的问题,用于添加和减去类中的值。

我正在尝试将我从csv读入的值传递给我的add函数。这个值是一个十进制值(例如500.00)我试过消除尾随0来使它只有500,这也没用。我一直在说:

TypeError: add() takes exactly one argument (two given).

即使我有一份打印声明确认它只是试图传入500。

这是我的功能:

def add(amount):
    self.total = self.total + amount

它被v.add(i)调用即使我将i设置为仲裁整数值,它仍然会导致相同的错误。我对python的经验相对较少,所以也许这里有一些我很想念的东西。感谢。

2 个答案:

答案 0 :(得分:3)

class Myclass(object):
    def __init__(self, total=0.):
        self.total = total

    def add(self, amount):     # <= needs `self` parameter
        self.total += amount

v = Myclass()
v.add(2.)

当你调用一个object方法时,它会隐式传递一个对象的引用 - 所以调用v.add(something)实际上会调用Myclass.add(v, something)

Voila - 两个参数,当你告诉它只期待一个......

答案 1 :(得分:0)

听起来你可能有两个问题:

  1. 方法的正常定义假定'自我'论证

    def add(self,amount):

  2. 如果您尝试删除尾随零,则表示您正在处理字符串。 您可能希望/需要将字符串值“500.00”转换为浮点值

    self.total = self.total + float(amount)

  3. 如果您尝试将字符串添加到数字中,Python会抱怨。您可以使用type()函数查看变量中保存的对象的类型。例如,您可能希望在add()方法中打印'amount'参数的类型,如下所示(用于调试):

    print "the type of amount is", type(amount)
    

    它会告诉你你有什么(str,int等)

    (顺便说一下,将它转换为方法之外的方法可能会更好,并且方法只接受数量的数值。)