Как использовать функции одного класса в теле другого?

Всем доброго! Мне нужно использовать функцию из класса DepartureScreen в теле класса Date_Label Можете подсказать, как это сделать?

class Date_Label(Label):
def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.cur_touch_pos = 0
def on_touch_down(self, touch):
    if self.collide_point(*touch.pos):
        self.cur_touch_pos = touch.x
    return super().on_touch_down(touch)
def on_touch_up(self, touch):
    if self.collide_point(*touch.pos):
        global cur_date
        if touch.x < self.cur_touch_pos:
            one_day = timedelta(1)
            cur_date = cur_date - one_day
            self.text = cur_date.strftime('%d.%m.%Y')
        elif touch.x > self.cur_touch_pos:
            one_day = timedelta(1)
            cur_date = cur_date + one_day
            self.text = cur_date.strftime('%d.%m.%Y')
        else:
            print('Просто нажал!')
    return super().on_touch_up(touch)       

class DepartureScreen(Screen):
def __init__(self, **kw):
    super().__init__(**kw)
    global cur_date
    #cur_date = date.today().strftime('%d.%m.%Y')
    self.ids.date_lbl.text = str(cur_date.strftime('%d.%m.%Y'))
    #self.load_dep_trains_data()
    
def load_dep_trains_data(self):
    global cur_date
    self.ids.dep_table_gl.clear_widgets()
    #self.ids.dep_table_rl.add_widget(Departure_Table(column_data = [('№ Поезда', 50), ('Прибытие', 50), ('Отправление', 50)]))
    chosen_date = self.ids.date_lbl.text
    table_name = 'trains_' + chosen_date[0:2] + '_' + chosen_date[3:5] + '_' + chosen_date[6:11]
    conn = sqlite3.connect('train_dep_db.db')
    curs = conn.cursor()
    try:
        curs.execute('SELECT * FROM trains_29_02_2024')
    except sqlite3.Error as error:
        if str(error) == 'no such table: trains_29_02_2024':
            print('Ошибка SQL: ' + str(error))
            print('Такой таблицы не существует!')
    conn.commit()
    curs.close()
    conn.close()

Заранее спасибо!


Ответы (1 шт):

Автор решения: Виктор

Тут вообще есть много разных способов, к примеру попробуете следующие : поменяйте классы целиком местами, затем в Date_Label объявите какую-нибудь переменную до функции init и передайте ей значение функции без вызова из другого класса, т.е

func=DepartureScreen.load_dep_trains_data

А теперь спокойно вызывайте эту функцию в вашем классе, так как в переменной func хранится сама функция (если быть точнее, ссылка на функцию так как она имеет тот же объект в памяти, что и сама функция) . К примеру так

self.func()

Проверьте работоспособность, я не проверял, и вообще мне кажется это даже тема не по kivy, а просто по ООП

→ Ссылка