如果每个属性的佣金百分比由压缩列表定义,并且压缩列表的长度有可能增加(例如CKRecord.References
),您将如何简化class Field:
coordinates = {}
def __init__(self, x_arg, y_arg, z_arg = None):
self.coordinates['x'] = x_arg
self.coordinates['y'] = y_arg
if z_arg is not None:
self.coordinates['z'] = z_arg
else:
self.coordinates['z'] = 0
def update_location(self, x_arg, y_arg, z_arg = None):
del self.coordinates['x']
del self.coordinates['y']
self.coordinates['x'] = x_arg
self.coordinates['y'] = y_arg
if z_arg is not None:
del self.coordinates['z']
self.coordinates['z'] = z_arg
def __repr__(self):
return "[" + str(self.coordinates['x']) + ", " + str(self.coordinates['y']) + ", " + str(self.coordinates['z']) + "]"
def __str__(self):
return "[" + str(self.coordinates['x']) + ", " + str(self.coordinates['y']) + ", " + str(self.coordinates['z']) + "]"
map = [[[Field(current_x, current_y, current_z) for current_z in xrange(3)] for current_y in xrange(10)] for current_x in xrange(10)]
?
calculate_commission()
答案 0 :(得分:1)
您可以使用字典:
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)
答案 1 :(得分:1)
首先,您应该在 init 函数中定义所有属性。例如,如果有人尝试访问佣金属性而不先检查该属性,则会出现错误。因此,请确保您应该使用某些内容对其进行初始化。
假设无需将佣金作为压缩列表,则可以这样操作:
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.comission行更改为
self.commission = zipped_price_and_commission[index][1]
编辑:看到更新后:如果佣金数量增加,则只需更新self.prices变量以反映它们。您还应该将价格作为参数传递给该类,而不是将其设置在该类内部
答案 2 :(得分:0)
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
self.priceData = { 'price_4': 5,'price_3': 3,'price_2': 2.5,'price_1': 2}
def calculate_commission(self):
commission = 0
for price , commision in zipped_price_and_commission:
if self.price >= self.priceData[price]:
commission = commision
break
setattr(self, 'commission', commission)
price = Price(price=3.3)
price.calculate_commission()
print(price.commission)