【问题标题】:String being passed in says there are two arguments传入的字符串表示有两个参数
【发布时间】:2012-06-06 21:59:56
【问题描述】:

我正在编写的用于添加和减去位于类中的值的函数有点问题。

我正在尝试将从 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相对缺乏经验,所以也许我在这里缺少一些简单的东西。谢谢。

【问题讨论】:

  • 尝试在amount 参数前添加self。另外,请尝试改用v().add(i)

标签: python integer arguments parameter-passing add


【解决方案1】:
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.)

当您调用对象方法时,它会隐式传递对该对象的引用 - 因此调用 v.add(something) 实际上会调用 Myclass.add(v, something)

瞧 - 两个参数,当你告诉它只期望一个时......

【讨论】:

  • 正确。谢谢,我知道这很愚蠢。我错过了把它放在那个功能上并一直忽略它。我会接受延迟到了!
【解决方案2】:

听起来您可能有 2 个问题:

  1. 方法的正常定义假定“self”参数

    def add(self, amount):

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

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

如果您尝试将字符串添加到数字中,Python 会报错。您可以使用 type() 函数查看保存在变量中的对象的类型。例如,您可能希望像这样在 add() 方法中打印“金额”参数的类型(用于调试):

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多