Python 3: Getter не возвращает данные, которые должны быть - PullRequest
0 голосов
/ 01 июня 2019

У меня есть родительский класс, в котором есть установщик, который возвращает значение queryFiltre, и получатель, который должен передать значение queryFiltre моему дочернему классу. queryFiltre должен возвращать SQL-запрос, такой как «SELECT * FROM Report WHERE GA_RPM> 0 и CAMPAIGN LIKE '% TT%' ...".

print () в установщике возвращает SQL-запрос, но print () геттера при вызове в дочернем классе возвращает что-то вроде "<<strong> main .SimpleGrid object at 0x042AF2B0>".

Что не так с моим кодом? Пожалуйста, терпите меня, потому что я все еще учусь, и у меня в голове все еще абстрактное понятие.

Я добавил комментарии в код, чтобы вы могли видеть, что происходит, где:

class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin):
    def __init__(self, parent, log):
        gridlib.Grid.__init__(self, parent, -1)


        ########### DATABASE CONNECT 
        self.path =os.path.dirname(os.path.realpath(__file__))
        self.dbfile = os.path.join(self.path , "report.db")
        self.db_conn = sqlite3.connect(self.dbfile)
        self.theCursor =  self.db_conn.cursor()
        ########### SETTING FILE CONNECT 
        self.configFile = os.path.join(self.path , "config.ini")
        self.config = configparser.ConfigParser()
        self.config.read(self.configFile)

        ########### Calling th Getter and Setter
        self.queryFiltre = self.setQueryFiltre(self)
        self.getQueryFiltre()

    ########### Setter
    def setQueryFiltre(self,queryFiltre):

            if self.config.get('Network', 'taboola') == "true" and self.config.get('Network', 'ob') == "true":
                network = ""
            elif self.config.get('Network', 'taboola') == "true" and self.config.get('Network', 'ob') == "false":
                network = " and CAMPAIGN LIKE '%TB%'"
            elif self.config.get('Network', 'outbrain') == "true" and self.config.get('Network', 'tb') == "false":
                network = " and CAMPAIGN LIKE '%OB%'"
            else:
                network = ""

            queryFiltre = "SELECT * FROM Report WHERE  GA_RPM > 0 " + network + "  and STATUS = '1' ORDER BY CLICKS DESC"

            ########### The print below returns the right value of queryFiltre
            print(queryFiltre)

            return queryFiltre

        ########### Getter
        def getQueryFiltre(queryFiltre):
            queryFiltre = queryFiltre
            return queryFiltre


class TestFrame(wx.Frame):
    def __init__(self, parent, log):
        wx.Frame.__init__(self, parent, 0, "Native Ads Reports V1.0", size=(1400,800))
        self.grid = SimpleGrid(self, log)

        ########### Calling the Getter of the parent Class
        self.queryFiltre = self.grid.getQueryFiltre()

        ########### DATABASE CONNECT
        self.path =os.path.dirname(os.path.realpath(__file__))
        self.dbfile = os.path.join(self.path , "report.db")
        self.db_conn = sqlite3.connect(self.dbfile)
        self.theCursor =  self.db_conn.cursor()

        ########### The print below returns a bad value, something like : <__main__.SimpleGrid object at 0x042AF2B0>
        print(self.queryFiltre)

Вы также заметите, что я добавил скрипт для определения пути и подключения к БД в обоих классах, есть ли способ сделать это только один раз в первом классе?

Спасибо,

1 Ответ

2 голосов
/ 01 июня 2019

Ваш getQueryFiltre() в SimpleGrid имеет неправильный отступ и отсутствует первый аргумент self. То, как вы это написали, это функция в пределах вашей setQueryFiltre(), и она нигде не вызывается.

Он должен иметь отступ в том же уровне, что и setQueryFiltre, и иметь первый аргумент self.

Кстати, вы не должны использовать геттеры. Это не pythonic, как объяснено здесь: https://stackoverflow.com/a/36943813/11451509

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...