我从来没有意识到我是一个多么可怜的程序员,直到我遇到下面这个练习。我允许Python在没有错误的情况下通过下面的所有测试。你知道吗
我相信我写的文件应该是一个类,但我完全不知道我的类应该是什么。我知道问题是什么,但不知道如何创建类或如何用适当的对象响应对类的调用。你知道吗
请复习下面的练习代码,然后在最后看我的问题。你知道吗
包含测试的文件:
import unittest
from allergies import Allergies
class AllergiesTests(unittest.TestCase):
def test_ignore_non_allergen_score_parts(self):
self.assertEqual(['eggs'], Allergies(257).list)
if __name__ == '__main__':
unittest.main()
1)我不理解这个断言末尾的“list”方法。它是内置的Python函数“list()”,还是我需要在“Allergies”类中定义的属性?你知道吗
2)什么类型的物品是“过敏(257).list”
self.assertEqual(['eggs'], Allergies(257).list)
3)我是否通过定义以下内容来实现这一点?你知道吗
def list(self):
list_of_allergens = ['eggs','pollen','cat hair', 'shellfish']
return list_of_allergens[0]
从它的使用方式来看,
list
是由Allergies
返回的对象的一个属性,它可以是一个返回对象的函数,也可以是构造类型为Allergies
的对象的调用。在最后一种情况下,整个过程可以很容易地实现为:从
.
可以看出,它是一个需要在Allergies
类上定义的属性,或者更确切地说,是在它的每个实例上定义的属性。*那么,它应该等于什么呢?
['eggs']
是字符串列表(嗯,字符串列表)。所以,除非您要创建一个喜欢将equal与list进行比较的自定义类型,否则您需要一个list。你知道吗不,你一开始就走错了方向。这将使
Allergies(257).list
成为方法。即使该方法在被调用时返回一个列表,测试驱动程序也不会调用它。它必须是一个列表。(而且,更明显的是,['eggs','pollen','cat hair', 'shellfish']
不等于['eggs']
,而且ist_of_allergens
和list_of_allergens
不是一回事。)那么,这份名单将从何而来?好吧,你的类需要给
self.list
的某个地方赋值。而且,由于类中唯一被调用的代码是构造函数(__new__
)和初始值设定项(__init__
),“某处”是非常有限的。你可能还没有学会__new__
,这意味着你可以选择一个地方,这使它非常简单。你知道吗*从技术上讲,您可以在这里使用class属性,但这似乎不是他们想要的。就这点而言,
Allergies
甚至不必是一个类;它可以是一个函数,它只是动态地定义一个新类型,构造它,并将list
添加到它的dict中。但是PEP 8命名标准和“不要无缘无故地使事情变得更复杂”都指向这里需要一个类。这看起来像是exercism.io中的一个练习。你知道吗
我已经完成了这个练习,所以我知道其中有什么。你知道吗
'list'应该是类Allergies的一个类属性,它本身是
list
类型的对象。至少这是一个直截了当的处理方法。我在类的__init__
方法中定义了它。在我看来,他们称之为'list'是令人困惑的,因为这与Pythonslist
类型冲突。你知道吗我的答案片段:
如果我是你,我会去做一些Python教程。我会从基础开始,即使感觉你是在覆盖你已经去过的地方。尽可能扎实地了解你的基本知识是绝对值得的。为此,我可以推荐Udacity或codeacademy。你知道吗
相关问题 更多 >
编程相关推荐