首页 > 解决方案 > 根据压缩属性、值对设置对象属性

问题描述

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

标签: python

解决方案


您可以使用字典:


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)

推荐阅读