“def”带来了错误的答案

2024-05-28 18:16:35 发布

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

我制作了一个包含一些函数的类: 但是当我实例化这些值时,答案是'alimentos',但这是错误的,它应该是'portugues'

我有两本字典和这门课:

professores_x = {
    'alimentos': [{"prof_id":"xx_alimento_1", "prof_disc":"alimentos"},
                  {"prof_id":"xx_alimento_2", "prof_disc":"alimentos"}],
    'português': [{"prof_id":"xx_port_1", "prof_disc":"português"},
                  {"prof_id":"xx_port_2", "prof_disc":"português"}]}

courses_x = {'alimentos': [{"course_name":"padeiro_confeiteiro"},
                           {"course_name":"padeiro_confeiteiro"}]}


# trying refactoring

class Disciplinas_cursos_1:
    "Define the disciplinas and professors"

    def __init__(self,cursos_,professores_):
        self.cursos_ = cursos_
        self.professores_ = professores_
        for self.p in self.cursos_.keys():
            if self.p == 'alimentos': self.alimentos()
            elif self.p == 'português': self.portugues()

    def alimentos(self):
        profiel_prof_disc = self.professores_[self.p][::]
        prof_disc_al = self.p
        discipl_alimentos = [self.p,[x['prof_id'] for x in profiel_prof_disc
                                                   if x['prof_disc'] == prof_disc_al]]
        return discipl_alimentos

    def portugues(self):
        print("Now its portuguese turn")
        profiel_prof_disc = self.professores_[self.p][::]
        prof_disc_port = self.p
        print(f"see I'm printing {prof_disc_port}. It's that the same of portuguese? If' not it's wrong")
        discipl_port =[self.p,[x['prof_id'] for x in profiel_prof_disc if x['prof_disc'] ==prof_disc_port]]
        print(f"see I'm printing {prof_disc_port} and {discipl_port}")
        return discipl_port


# ok!! Now I do the instance:
disc_a = Disciplinas_cursos_1(courses_x, professores_x)
disc_a.alimentos()

输出

['alimentos', ['xx_alimento_1', 'xx_alimento_2']]

很好,这就是我想要的,但是当我尝试第二个函数时,它会带给我'alimentos' 但是我需要的是'portugues',而不是'alimentos'

disc_a.portugues()

输出

Now its portuguese turn
see I'm printing alimentos. It's that the same of portuguese? If' not it's wrong
see I'm printing alimentos and ['alimentos', ['xx_alimento_1', 'xx_alimento_2']]

Tags: theselfidportdiscxxprofprofiel
1条回答
网友
1楼 · 发布于 2024-05-28 18:16:35

你的问题是self.p。在__init__中,您正在使用循环设置该值,当您在循环体中调用self.alimentos()self.portugues()时,它将是有意义的,因为self.p值将对应于被调用的方法

但是如果您从__init__外部调用disc_a.portugues(),您将得到循环后self.p的最后一个值,这可能与您正在调用的方法完全不匹配。这就是为什么您得到无效的输出,它使用了不适当的self.p

我对你打算在你的方法中做什么没有一个明确的理解,所以我没有一个推荐的修复方法。但总的来说,我建议您更仔细地考虑将哪些值作为属性和参数传递给代码的哪些部分self.p可能不应作为属性存在。也许这应该是对方法的一个论证?也许您需要不同的属性来将数据排序到不同的容器中,而不是重复地在所有容器上循环。您可能需要重新设计类,使其数据更符合您使用它的方式

相关问题 更多 >

    热门问题