我一直在尝试是否可以更改计算所必需的项目的折扣。我的挑战是,我无法更新折扣,因为它被设置为0。
class Dog:
def __init__(self, food, amount, cost, discount=0):
self.food = food
self.amount = amount
self.cost = cost
self.discount = discount
if self.discount == 0:
self.cost = self.amount *100
else:
self.cost = self.amount * 100 * (1-self.discount)
class Malamute(Dog):
def __init__(self, food, amount, cost, behavior, discount=0):
super().__init__(food, amount, cost, discount=0)
self.behavior = behavior
if self.behavior == "very good":
self.discount = 0.20
if self.behavior == "good":
self.discount = 0.10
if self.behavior == "bad":
self.discount = 0
class Golden(Dog):
def __init__(self, food, amount, cost, damage, discount=0):
super().__init__(food, amount, cost, discount=0)
self.damage = damage
self.discount = -self.damage
class Golden_Malamute(Malamute,Golden):
def __init__(self, food, amount, cost, behavior, damage, discount=0):
Malamute().__init__(self,food, amount, cost, behavior, discount=0)
Golden().__init__(self,food, amount, cost, damage, discount=0)
self.discount=discount
Brownie = Dog("Pellet", 10, 0,)
print("Brownie", Brownie.cost)
Mala=Malamute("Pellet",10,0,"good")
print("Mala",Mala.cost)
Goldie=Golden("Pellet",10,0, 0.10)
print("Goldei",Goldie.cost)
#Blackie=Golden_Malamute("Pellet", 10, 5, "good", 0.05)
#print("Blackie", Blackie.cost)
当应该有折扣时,它不会直接应用,因为折扣被设置为零。我无法将注释转移到其他子类,因为在某些情况下,dog本身将被调用,如果调用子类,它将不得不经历两个进程。
您可能需要尝试遍历程序并大声说出来的技巧。
例如,这就是我如何阅读您的清单以及如何检测问题的方法。
- 新建
GoldenDog
GoldenDog
呼叫super.__init
- 超级init根据0 的折扣计算成本
- 然后我运行
GoldenDog.__init
的其余部分 - 我将折扣设置为
0.10
问题是您在计算成本之后才设置折扣。
要解决这个问题,您应该计算调用者请求该成本时的成本。这样,它将能够使用当前折扣的值(而不是只能使用创建时应用的折扣)。
或者,您需要将折扣传递给super.__init
调用。
class Golden(Dog):
def __init__(self, food, amount, cost, damage, discount=0):
super().__init__(food, amount, cost, discount=-damage)
self.damage = damage
您的下一个任务将是修复折扣逻辑,因为它当前增加价格,而不是降低它。