首页 > 解决方案 > 如何对属于同一类的所有对象的参数之一求和

问题描述

class Bill:

    def __init__(self,type,amount):
        self.amount = amount
        self.type = type

    def total(*args):
        total_bill = []
        for arg in args:
            total_bill.append(arg.amount)
        return sum(total_bill)

b1 = Bill('Elect',500)
b2 = Bill('Gas',300)
b3 = Bill('Other',100)

print(Bill.total(b1,b2,b3))

print(b1.total(b2))

我正在尝试理解 Python OOP 逻辑。在这里,我创建了一个total计算账单对象总金额的方法 ( )。该代码有效,但似乎非常不寻常,因为第二个 print ( b1.total(b2)) 是无意义的(当我将其称为实例的方法时)。因此,我想知道这是否是一种体面的方式?我的意思是为类内的实例之间的计算创建一个方法?获得账单总额的最佳方法是什么。(账单数量可能要多得多。)

标签: pythonclassoop

解决方案


您可以使用类变量来保存所有账单项目,然后在计算总数时使用它,而不是将项目作为参数传递。

class Bill:

    all_bills = []

    def __init__(self,type,amount):
        self.amount = amount
        self.type = type
        self.all_bills.append(self)

    @classmethod
    def total(cls):
        return sum(arg.amount for arg in cls.all_bills)

b1 = Bill('Elect',500)
b2 = Bill('Gas',300)
b3 = Bill('Other',100)

print(Bill.total())        

推荐阅读