【问题标题】:getting a typeerror when trying to sum arguments using a function尝试使用函数对参数求和时出现类型错误
【发布时间】:2022-01-07 15:27:50
【问题描述】:

所以我正在使用预算计算器,我遇到了一个错误,我无法添加费用

这是错误:

Traceback (most recent call last):
  File "/home/jason/Documents/budgetcalc/./budgetcalc.py", line 50, in <module>
    totexpenses = exp.expenses(args.expenses)
TypeError: 'int' object is not callable

用于计算的代码:

class Expenses(Budgeter):
    def __init__(self):
        super().__init__()

    def expenses(self, expense_list):
        self.expenses = expense_list
        total = sum(self.expenses)
        return total

# instance 
exp = Expenses()

定义的参数:

parser.add_argument('--expenses', help='n amounts of expenses', nargs='*', type=int)

这是该参数的代码:

if args.expenses:
    totexpenses = exp.expenses(args.expenses)
    # print(f'${income} net income')
    print(f'${totexpenses} in expenses')

如果需要,这里是完整的代码:

#!/usr/bin/env python

import argparse
import sys

class Budgeter:
    def __init__(self):
        self.wage = 0
        self.netincome = 0
        self.expenses = 0
        self.hours = 0

class Income(Budgeter):
    def __init__(self):
        super().__init__()

    def income(self, wage, hours):
        self.wage = wage
        self.hours = hours
        self.netincome = (float(self.wage) * int(self.hours)) * 4.34
        return self.netincome

class Expenses(Budgeter):
    def __init__(self):
        super().__init__()

    def expenses(self, expense_list):
        self.expenses = expense_list
        total = sum(self.expenses)
        return total
        
parser = argparse.ArgumentParser()

parser.add_argument('--wage', help='enter a wage ($$/hr)')
parser.add_argument('--hours', help='hours per week')
parser.add_argument('--expenses', help='n amounts of expenses', nargs='*', type=int)
parser.add_argument('--interactive', help='get a prompt for easy use', action='store_true')

args = parser.parse_args()

pc_budgeter = Budgeter()
rawinc = Income()
exp = Expenses()

if args.wage and args.hours:
    if int(args.hours) <= 24:
        income = rawinc.income(args.wage, args.hours)

        if args.expenses:
            totexpenses = exp.expenses(args.expenses)
            print(f'${income} net income')
            print(f'${totexpenses} expenses')

        else:
            print('missing --expenses')
    else:
        print(f'there are only 24 hours in a day not {args.hours}')
else:
    parser.print_help()

【问题讨论】:

标签: python argparse


【解决方案1】:

Budgeter 类定义了一个名为expenses 的整数属性:

class Budgeter:
    def __init__(self):
        self.wage = 0
        self.netincome = 0
        self.expenses = 0

...然后Expenses 类,继承自Budgeter,定义了一个名为expenses 的方法

class Expenses(Budgeter):
    def __init__(self):
        super().__init__()

    def expenses(self, expense_list):

将其中一项重命名为不同的名称。

顺便说一句,子类中不需要__init__,因为它唯一做的就是调用父类__init__,无论如何这是默认行为。

【讨论】:

  • 好吧,我不知道这个名字很重要
猜你喜欢
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多