问题描述
所以我已经习惯了在 python 中使用 OOP,这是一条崎岖不平的道路,但到目前为止一切似乎都在奏效。然而,我遇到了一个障碍,我似乎无法弄清楚这一点。这是前提。
我调用一个类并将 2 个变量传递给它,一个报告和一个位置。从那里,我需要获取位置变量,将其传递给数据库并获取它应该运行的过滤器列表,这是通过字典调用完成的。最后,一旦字典调用发生,我需要获取该报告并通过过滤器运行它。这是我的代码。
class Filters(object):
def __init__ (self,report,location):
self.report = report
self.location = location
def get_location(self):
return self.location
def run(self):
cursor = con.cursor()
filters = cursor.execute(filterqry).fetchall()
for i in filters:
f = ReportFilters.fd.get(i[0])
f.run()
cursor.close()
class Filter1(Filters):
def __init__(self):
self.f1 = None
''' here is where i tried super() and Filters.__init__.() etc.... but Couldn't make it work'''
def run(self):
'''Here is where i want to run the filters but as of Now i am trying to print out the
location and the report to see if it gets the variables.'''
print(Filters.get_location())
class ReportFilters(Filters):
fd = {
'filter_1': Filter1(),'filter_2': Filter2(),'filter_3': Filter3()
}
我的错误来自字典调用,就像我试图调用它一样,因为它要求报告和位置变量。
希望这足够清楚,对您有所帮助,一如既往地受到应有的赞赏。
该死的地猪
解决方法
到它的父类的呼叫应被初始化函数中定义,你应该传递参数“自我”,“报告”和“位置”到的初始化强>()和过滤器。的 init() 调用父类,以便它可以找到这些变量。
如果错误是在Filters1类对象,当您尝试使用run方法,你看不到的位置或报表变量从父类中的传递,这是因为当你实例化那些还没有定义它们对象在ReportFilters.fd
应该是:
class ReportFilters(Filters):
fd = {
'filter_1': Filter1(report1,location1),'filter_2': Filter2(report2,location2),'filter_3': Filter3(report3,location3)
}
class Filter1(Filters):
def __init__(self,report,location):
Filters.__init__(self,location)
self.f1 = None
def run(self):
print(self.get_location())