在我遇到下面的练习之前,我从未意识到程序员的糟糕程度。我要编写一个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)我不理解"列表"这个断言结束时的方法。它是内置的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]
答案 0 :(得分:1)
1)我不理解这个断言结束时的“list”方法。它是内置Python函数“list()”,还是我需要在“Allergies”类中定义的属性?
从.
开始,您可以确定它是您需要在Allergies
类上定义的属性,或者更确切地说,在每个实例上定义。*
2)什么类型的对象是“过敏(257).list”
嗯,它应该比较等于什么? ['eggs']
是一个字符串列表(好吧,字符串)。因此,除非您要创建喜欢与列表进行比较的自定义类型,否则您需要一个列表。
3)我是否通过定义如下内容来解决这个问题?
def list(self):
list_of_allergens = ['eggs','pollen','cat hair', 'shellfish']
return ist_of_allergens
没有。你马上就走错了路。这会使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的命名标准和“没有任何理由使事情变得更复杂”都指向了这里的课程。
答案 1 :(得分:1)
这看起来像exercism.io的练习之一。
我已完成练习,所以我知道所涉及的内容。
' list' 应该是类Allergies的类属性,它本身就是list
类型的对象。至少这是处理它的一种直接方式。我在类的__init__
方法中定义了它。在我看来,令人困惑的是,他们称之为' list' ,因为这与Pythons list
类型冲突。
摘录:
class Allergies(object):
allergens = ["eggs", "peanuts",
"shellfish", "strawberries",
"tomatoes", "chocolate",
"pollen","cats"]
def __init__(self, score):
# score_breakdown returns a list
self.list = self.score_breakdown(score) # let the name of this function be a little clue ;)
如果我是你,我会去做一些Python教程。我会从基础开始,即使你觉得你已经覆盖了你已经走过的地面。绝对值得尽可能地了解您的基本知识/基础知识。为此,我可以推荐Udacity或codeacademy。
答案 2 :(得分:1)
从它的使用方式来看,list
是Allergies
返回的对象的一个属性,它可以是一个返回一个对象的函数,或者只是调用构造一个{{1}类型的对象的函数。 }。在最后一种情况下,整个事情可以很容易地实现为:
Allergies