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

问题描述

所以我已经习惯了在 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())

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...