簡體   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