繁体   English   中英

试图弄清楚如何在从字典调用 class 时将变量从一个 class 传递到另一个 python

[英]Trying to figure out how to pass variables from one class to another in python while calling a class from a dictionary

所以我习惯了在 python 中与 OOP 一起工作,这是一条崎岖不平的道路,但到目前为止一切似乎都在运作。 但是,我遇到了障碍,我似乎无法弄清楚。 这是前提。

我调用 class 并将 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()
    }

我的错误来自字典调用,因为当我试图调用它时它要求报告和位置变量。

希望这对您来说足够清楚,可以一如既往地得到应有的赞赏。

该死的土拨鼠

对其父 class 的调用应该在 init function 中定义,您应该将 arguments 的“self”、“report”和“location”传递给init () 和 Filters。 init () 调用父 class 以便它可以找到那些变量。

如果错误在 Filters1 class object 中,当您尝试使用 run 方法时,您没有看到从父 class 传入的位置或报告变量,那是因为您在 ReportFilters 中实例化那些 object 时没有定义它们.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, report, location)
        self.f1 = None

    def run(self):
        print(self.get_location())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM