Python 基于压缩属性、值对设置对象属性
如果压缩列表定义了每个属性的佣金百分比,并且压缩列表的长度可能会增加(例如,Python 基于压缩属性、值对设置对象属性,python,Python,如果压缩列表定义了每个属性的佣金百分比,并且压缩列表的长度可能会增加(例如,…('price_201',2.3),),您将如何简化计算佣金() 您可以使用字典: 佣金={ ‘价格四’:.04, “价格3”:.034, “价格2”:.029, ‘价格1’:.021} 然后,在计算佣金() def计算佣金(自): 如果self.price>=self.price_4: 佣金=佣金['price_4'] elif self.price>=self.price_3: 佣金=佣金['price_3']
…('price_201',2.3),
),您将如何简化计算佣金()
您可以使用字典:
佣金={
‘价格四’:.04,
“价格3”:.034,
“价格2”:.029,
‘价格1’:.021}
然后,在计算佣金()
def计算佣金(自):
如果self.price>=self.price_4:
佣金=佣金['price_4']
elif self.price>=self.price_3:
佣金=佣金['price_3']
elif self.price>=self.price_2:
佣金=佣金['price_2']
elif self.price>=self.price_1:
佣金=佣金['price_1']
其他:
佣金=0
setattr(自我、委托、委托)
您可以使用字典:
佣金={
‘价格四’:.04,
“价格3”:.034,
“价格2”:.029,
‘价格1’:.021}
然后,在计算佣金()
def计算佣金(自):
如果self.price>=self.price_4:
佣金=佣金['price_4']
elif self.price>=self.price_3:
佣金=佣金['price_3']
elif self.price>=self.price_2:
佣金=佣金['price_2']
elif self.price>=self.price_1:
佣金=佣金['price_1']
其他:
佣金=0
setattr(自我、委托、委托)
首先,您应该在init函数中定义所有属性。例如,如果有人试图访问commission属性而没有首先检查它,则会出现错误。所以,为了确定,你应该用一些东西来初始化它
假设不需要将佣金作为压缩列表,您可以这样做:
comission = [ 0.04, 0.034, 0.029, 0.021]
class Price:
def __init__(self, cost):
self.price = cost
self.prices = [5,3,2.5,2]
self.commission = 0
def calculate_commission(self):
for index, prc in enumerate(self.prices):
if self.price >= prc:
self.commission = comission[index]
break
price = Price()
price.calculate_commission()
print(price.commission)
但是,如果您确实需要压缩列表,可以将self.commission行更改为
self.commission = zipped_price_and_commission[index][1]
编辑:在看到您的更新后:如果佣金数量增加,您只需更新self.prices变量以反映它们。您还应该将价格作为参数传递给类,而不是首先在类中设置它,您应该在init函数中定义所有属性。例如,如果有人试图访问commission属性而没有首先检查它,则会出现错误。所以,为了确定,你应该用一些东西来初始化它
zipped_price_and_commission = [
('price_4', .04),
('price_3', .034),
('price_2', .029),
('price_1', .021),
假设不需要将佣金作为压缩列表,您可以这样做:
comission = [ 0.04, 0.034, 0.029, 0.021]
class Price:
def __init__(self, cost):
self.price = cost
self.prices = [5,3,2.5,2]
self.commission = 0
def calculate_commission(self):
for index, prc in enumerate(self.prices):
if self.price >= prc:
self.commission = comission[index]
break
price = Price()
price.calculate_commission()
print(price.commission)
但是,如果您确实需要压缩列表,可以将self.commission行更改为
self.commission = zipped_price_and_commission[index][1]
编辑:在看到您的更新后:如果佣金数量增加,您只需更新self.prices变量以反映它们。您还应该将价格作为参数传递给类,而不是在类内部设置价格
zipped_price_and_commission = [
('price_4', .04),
('price_3', .034),
('price_2', .029),
('price_1', .021),
]
]
我在OP中添加了更多的细节。然后压缩列表的长度可能会增加。例如,价格水平可能上升到“价格200”
我在OP中添加了更多细节。然后压缩列表的长度可能会增加。例如,价格水平可能会上升到'price_200'
我仍然会在循环中使用zip
:对于邮政编码中的p,c(价格,佣金):…
看起来比枚举更“pythonic”我仍然会在循环中使用邮政编码:对于邮政编码中的p,c(价格,佣金):…
看起来更“pythonic”而不是枚举