我需要写一个“商店”。我class ClothingItem
- Shoe
,Pant
和Shirt
都来自ClothingItem
。现在我正在研究class Inventory(list)
。我可以添加鞋子,裤子和衬衫,并获得总数(inventory.len()
)。现在爸爸要我告诉他有多少鞋子在库存,有多少裤子,等等。他说,如果我的商店开始销售Short
或Legging
,我就不能接触我的Inventory
课程。他说过将TYPE传递给长度函数,但我无法弄清楚如何向Google询问。他在C#工作,所以他只知道如何用它来做,而不是用Python。
所以...有人可以告诉我在哪里想出这个吗?他说,如果你发布他会知道的代码,只是让我更难做,所以请不要发给我代码!告诉我应该在哪里看,我会非常感激。
答案 0 :(得分:3)
如果您的class ClothingItem
包含以下方法:in_stock()
,它会返回从self.name
和self.quantity
构建的字符串,每个子类(Shoe
,{{1 }},Pant
,Shirt
等)只需在实例化时正确分配Legging
。
这样做提供了一个名为polymorphism的东西(虽然Duck Typing wikipedia article可能是一个更好的介绍。跳过你不理解的位。)所以子类的行为都不同 - 但是以一种方式“适合”你给他们的名字。
顺便说一下,如果这是我要解决的问题,我可能不会为商店中的每种服装都设置self.name
- 这意味着您需要编辑代码为了携带新产品。这种设计足以学习如何使用子类化,但这不是一个理想的用途。 (相反,我只是将服装类型存储为ClothingItem
类的成员。裤子,衬衫,鞋子,大猩猩,你对它们都一视同仁 - 这个名字,你有多少,你有多少卖给他们,你从供应商那里支付多少钱。)
答案 1 :(得分:3)
有几种方法可以解决这个问题。首先想到的是使用isinstance
和filter
函数(或list comprehension代替filter
...但是如果你刚学习,理解可能太快了太多,无法将你的列表削减成属于特定类的项目。
另外,提醒你的父亲,如果学习编程“杀了你”,他就会为你学习创造错误的环境。当他们有这种感觉时,没有人能在这个话题中茁壮成长。正如有人谁爱编程,这真的让我伤心地看到,发生在人。
答案 2 :(得分:1)