由于类值被设置为0,因此无法将折扣命令更新为子类值



我一直在尝试是否可以更改计算所必需的项目的折扣。我的挑战是,我无法更新折扣,因为它被设置为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本身将被调用,如果调用子类,它将不得不经历两个进程。

您可能需要尝试遍历程序并大声说出来的技巧。

例如,这就是我如何阅读您的清单以及如何检测问题的方法。

  1. 新建GoldenDog
  2. GoldenDog呼叫super.__init
  3. 超级init根据0
  4. 的折扣计算成本
  5. 然后我运行GoldenDog.__init的其余部分
  6. 我将折扣设置为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

您的下一个任务将是修复折扣逻辑,因为它当前增加价格,而不是降低它。

相关内容

  • 没有找到相关文章

最新更新