我制作了一个包含一些函数的类:
但是当我实例化这些值时,答案是'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']]
你的问题是
self.p
。在__init__
中,您正在使用循环设置该值,当您在循环体中调用self.alimentos()
或self.portugues()
时,它将是有意义的,因为self.p
值将对应于被调用的方法但是如果您从
__init__
外部调用disc_a.portugues()
,您将得到循环后self.p
的最后一个值,这可能与您正在调用的方法完全不匹配。这就是为什么您得到无效的输出,它使用了不适当的self.p
键我对你打算在你的方法中做什么没有一个明确的理解,所以我没有一个推荐的修复方法。但总的来说,我建议您更仔细地考虑将哪些值作为属性和参数传递给代码的哪些部分
self.p
可能不应作为属性存在。也许这应该是对方法的一个论证?也许您需要不同的属性来将数据排序到不同的容器中,而不是重复地在所有容器上循环。您可能需要重新设计类,使其数据更符合您使用它的方式相关问题 更多 >
编程相关推荐