python - 如何对属于同一类的所有对象的参数之一求和
问题描述
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)
) 是无意义的(当我将其称为实例的方法时)。因此,我想知道这是否是一种体面的方式?我的意思是为类内的实例之间的计算创建一个方法?获得账单总额的最佳方法是什么。(账单数量可能要多得多。)
解决方案
您可以使用类变量来保存所有账单项目,然后在计算总数时使用它,而不是将项目作为参数传递。
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())
推荐阅读
- ember.js - 结合两个 emberjs 应用程序
- c++ - C++ 共享库在与 C 应用程序链接时给出浮点异常
- python - Kivy - 我如何找出 .kv 文件中 Widget 的路径
- python-3.x - 轮廓的区域是否包含内部的孔?
- mongodb - 如何使用 pymongo 获取第一个和最后一个日期值
- flutter - 因为 flutter_tools 依赖 sockjs_client 0.3.5 不匹配任何版本,
- maven - 在 Maven 自定义原型中获取登录用户名
- celery - 在 Celery 任务中,retry_backoff 和 retry_backoff_max 会影响手动 self.retry() 调用吗?
- c++ - 如何使 SQL 应用程序脱机工作?
- sharepoint-2013 - 使用 caml 查询添加选择