翻译在找什么?

2024-04-19 03:16:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我从来没有意识到我是一个多么可怜的程序员,直到我遇到下面这个练习。我允许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]

Tags: 文件ofimportself定义maindefunittest
3条回答

从它的使用方式来看,list是由Allergies返回的对象的一个属性,它可以是一个返回对象的函数,也可以是构造类型为Allergies的对象的调用。在最后一种情况下,整个过程可以很容易地实现为:

class Allergies:
    def __init__(self, n):
        # probably you should do something more
        # interesting with n
        if n==257:
            self.list=['eggs']

1) I don't understand the "list" method at the end of this assertion. Is it the the Built-In Python function "list()," or is it an attribute that I need to define in my "Allergies" class?

.可以看出,它是一个需要在Allergies类上定义的属性,或者更确切地说,是在它的每个实例上定义的属性。*

2) What type of object is "Allergies(257).list"

那么,它应该等于什么呢?['eggs']是字符串列表(嗯,字符串列表)。所以,除非您要创建一个喜欢将equal与list进行比较的自定义类型,否则您需要一个list。你知道吗

3) Do I approach this by defining something like the following?

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_allergenslist_of_allergens不是一回事。)

那么,这份名单将从何而来?好吧,你的类需要给self.list的某个地方赋值。而且,由于类中唯一被调用的代码是构造函数(__new__)和初始值设定项(__init__),“某处”是非常有限的。你可能还没有学会__new__,这意味着你可以选择一个地方,这使它非常简单。你知道吗


*从技术上讲,您可以在这里使用class属性,但这似乎不是他们想要的。就这点而言,Allergies甚至不必是一个类;它可以是一个函数,它只是动态地定义一个新类型,构造它,并将list添加到它的dict中。但是PEP 8命名标准和“不要无缘无故地使事情变得更复杂”都指向这里需要一个类。

这看起来像是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教程。我会从基础开始,即使感觉你是在覆盖你已经去过的地方。尽可能扎实地了解你的基本知识是绝对值得的。为此,我可以推荐Udacitycodeacademy。你知道吗

相关问题 更多 >