Итерация нового экземпляра объекта в Python - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок в OOP Python У меня есть объект:

class Object:

    def __init__(self, start_date, end_date, thing)
        self.start_date = start_date
        self.end_date = end_date 
        self.thing = thing

       ( ... ) 


    def get_things(self):
        return self.db.execute_fetchall(f"select date, p1, p2, p2, p4 from {self.thing} where date between '{self.start_date}' and '{self.end_date}'")

       ( ... ) 

Теперь, если у меня есть:

some_things = ["table_1", "table_2", "table_3"]
Object.get_things()

Метод просто выбирает приведена таблица, но я хочу постараться быть максимально эффективным. Есть ли какой-либо другой способ опроса БД для всех трех имен таблиц, кроме:

for thing in things: 
    Object(start_date=start_date, end_date=end_date, thing=thing)

Должен ли я просто иметь такой тип логики c в массовом операторе и иметь метод get_all()? Таблицы (stati c), которые я выбираю, всегда будут одинаковыми, и я ищу самый быстрый способ выбрать из них данные ...

1 Ответ

1 голос
/ 12 февраля 2020

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

class object:
    things = []
    def __init__(self, thing):
        self.thing = thing
        self.things.append(thing)
    def get_things(self):
        return(self.things)

a = object(1)
b = object(2)
c = object(3)

print(a.get_things()) # Prints [1, 2, 3]

Вероятно, это будет самый быстрый способ, так как ваш список вещей будет храниться в памяти, и получение агрегированного списка не потребует каких-либо вычислений. Следует отметить, что у этого подхода есть свои недостатки. Например, если вы измените значение некоторого object.thing, вам также нужно будет отразить это изменение в списке object.things, и вы увидите, что для таких вещей, как удаление или переопределение экземпляров объекта, потребуется дополнительная работа.

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