python - 根据压缩属性、值对设置对象属性
问题描述
calculate_commission()
如果每个属性的佣金百分比由压缩列表定义并且压缩列表的长度可能会增加(例如) ,您将如何简化...('price_201', 2.3),
?
zipped_price_and_commission = [
('price_4', .04),
('price_3', .034),
('price_2', .029),
('price_1', .021),
]
class Price:
def __init__(self, **kwargs):
self.price = kwargs.get('price')
self.price_1 = 2
self.price_2 = 2.5
self.price_3 = 3
self.price_4 = 5
def calculate_commission(self):
if self.price >= self.price_4:
commission = .04
elif self.price >= self.price_3:
commission = .034
elif self.price >= self.price_2:
commission = .029
elif self.price >= self.price_1:
commission = .021
else:
commission = 0
setattr(self, 'commission', commission)
IN: price = Price(price=3.3)
IN: price.calculate_commission()
IN: print(price.commission)
OUT: 0.034
解决方案
您可以使用字典:
commissions = {
'price_4': .04,
'price_3': .034,
'price_2': .029,
'price_1': .021}
然后,在calculate_commission()
:
def calculate_commission(self):
if self.price >= self.price_4:
commission = commissions['price_4']
elif self.price >= self.price_3:
commission = commissions['price_3']
elif self.price >= self.price_2:
commission = commissions['price_2']
elif self.price >= self.price_1:
commission = commissions['price_1']
else:
commission = 0
setattr(self, 'commission', commission)
推荐阅读
- python - 将列表划分为偏移量为 1 的子列表
- javascript - 传递要在 jQuery 对象上使用的方法
- scala - 有没有办法从 Scala 中数据框的现有列创建多个列?
- karate - 如何在空手道 UI 中设置 karate.env
- javascript - 如何创建一个过滤器,在生成的数组中的每个元素周围格式化 HTML 标记?
- php - 将 JSON 的 mysql 结果更改为按键索引
- java - 选择动态保管箱
- jboss-eap-7 - JBoss EAP 7.1.0 使用 cli 连接但使用 CommandContext 或 ModelControllerClient 失败
- html - A11y 用于空锚标签
- javascript - React路由器动态url参数