我正在写的一个函数的问题,用于添加和减去类中的值。
我正在尝试将我从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的经验相对较少,所以也许这里有一些我很想念的东西。感谢。
答案 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)
听起来你可能有两个问题:
方法的正常定义假定'自我'论证
def add(self,amount):
如果您尝试删除尾随零,则表示您正在处理字符串。 您可能希望/需要将字符串值“500.00”转换为浮点值
self.total = self.total + float(amount)
如果您尝试将字符串添加到数字中,Python会抱怨。您可以使用type()函数查看变量中保存的对象的类型。例如,您可能希望在add()方法中打印'amount'参数的类型,如下所示(用于调试):
print "the type of amount is", type(amount)
它会告诉你你有什么(str,int等)
(顺便说一下,将它转换为方法之外的方法可能会更好,并且方法只接受数量的数值。)