不知道为什么我会得到这个属性

2024-04-24 01:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

assertEqual测试来自一个模块,该模块只调用一个函数,在其中运行一些数据,计算处理数据的结果,并将其与我的预测答案进行比较。例如,我对total_test的预测答案是6.0。 当我运行我的代码时(下面是有问题的部分),我得到以下错误:

Traceback (most recent call last):
  File "C:/Users/anon/Desktop/test.py", line 72, in <module>
    TransactionTest().run()
  File "C:/Users/anon/Desktop/test.py", line 68, in run
    self.total_test()
  File "C:/Users/anon/Desktop/test.py", line 60, in total_test
    assertEqual(self.__t1.total(), 6.0)
  File "C:/Users/anon/Desktop/test.py", line 18, in total
    return sum(map(lambda p: p.cost(), self.__purchases))
  File "C:/Users/anon/Desktop/test.py", line 18, in <lambda>
    return sum(map(lambda p: p.cost(), self.__purchases))
AttributeError: 'float' object has no attribute 'cost'

所有的行号应该向下移动几行,以说明我复制和粘贴它在这里非常轻微的修改

从本质上说,我的total\u test函数在调用时会导致崩溃。我不知道为什么会出现属性错误

class Transaction:
    def __init__(self, purchases, tax_rate):
        self.__purchases = purchases
        self.__tax_rate = tax_rate

    def total(self):
        return sum(map(lambda p: p.cost(), self.__purchases))

    def tax_rate(self):
        return self.__tax_rate

    def total_taxable(self):
        taxable_items = filter(lambda p: p.item().taxable(),self.__purchases) 
        return sum(map(lambda p: p.cost(), taxable_items))

    def grand_total(self):
        return self.total() + self.__tax_rate * self.total_taxable()

    def __str__(self):
        return "Total: " + self.__total + ";" + "Total_tax: " + self.__total_taxable * self.__tax_rate + ";" + "Grand Total: " + self.__grand_total
    def print_receipt(self):

        f = open("receipt.txt", "w")
        f.write("\n".join(map(lambda p:str(p),self.__purchases)))
        f.write("\n")
        f.write("Total: $%.2f" % self.total())
        f.write("\n")
        f.write("Tax ( $%.2f @ %.2f %%): $%.2f" %(self.total_taxable(), self.__tax_rate * 100, self.__tax_rate * self.total_taxable()))
        f.write("\n")
        f.write("Grand Total: $%.2f" % self.grand_total())
        f.close()
#problem 9-----------------------------------------------------------------------------------

class TransactionTest:
    print('----------------------------')
    def __init__(self):
        t_list = [1.0,2.0,3.0]
        self.__t1 = Transaction(t_list, 0.05)
        #self.__d2 = Transaction(3.0, 0.06)

    def total_test(self):
        print('total_test-----------------------------------------')
        assertEqual(self.__t1.total(), 6.0)

    def tax_rate_test(self):
        print('tax_rate_test--------------------------------------')
        assertEqual(self.__t1.tax_rate(), 0.05)
        #assertEqual(self.__d2.tax_rate() = Transaction(0.06))

    def run(self):
        self.total_test()
        #self.tax_rate_test()
        #self.str_test()

TransactionTest().run()  

Tags: lambdatestselfreturnratedefusersfile
1条回答
网友
1楼 · 发布于 2024-04-24 01:22:58

测试代码将三个float实例的列表[1.0,2.0,3.0]作为purchases参数传递给Transaction的初始值设定项。但是,其他Transaction方法尝试调用该列表中值的各种方法(例如cost()item()),并且由于float实例没有这些方法,因此引发了异常

我怀疑您的Transaction代码是要在其他类型的对象的列表上运行的,其中定义了适当的方法。您需要重写测试以使用正确类型的对象

相关问题 更多 >