Почему метод run подкласса Thread может быть методом класса?Python

Программы на Python
Anonymous
Почему метод run подкласса Thread может быть методом класса?

Сообщение Anonymous »

Я читаю документацию по API расписания, и в примере «Запуск в фоновом режиме» они определяют метод запуска как метод класса в своем классе ScheduleThread. Код ниже:

Код: Выделить всё

import threading
import time

import schedule

def run_continuously(interval=1):
"""Continuously run, while executing pending jobs at each
elapsed time interval.
@return cease_continuous_run: threading. Event which can
be set to cease continuous run. Please note that it is
*intended behavior that run_continuously() does not run
missed jobs*. For example, if you've registered a job that
should run every minute and you set a continuous run
interval of one hour then your job won't be run 60 times
at each interval but only once.
"""
cease_continuous_run = threading.Event()

class ScheduleThread(threading.Thread):
@classmethod
def run(cls):
while not cease_continuous_run.is_set():
schedule.run_pending()
time.sleep(interval)

continuous_thread = ScheduleThread()
continuous_thread.start()
return cease_continuous_run

def background_job():
print('Hello from the background thread')

schedule.every().second.do(background_job)

# Start the background thread
stop_run_continuously = run_continuously()

# Do some other things...
time.sleep(10)

# Stop the background thread
stop_run_continuously.set()
Я не понимаю, почему здесь используется @classmethod. После небольшого исследования выяснилось, что run() всегда должен быть методом экземпляра в подклассах Thread. Это ошибка или я что-то упускаю?
Я запустил код из документации без изменений, а затем изменил метод класса на метод экземпляра (удалил декоратор и заменил run(cls) на run(self)) и снова запустил код, и поведение было идентичным.
Я ожидал, что что-то сломается или будет другое поведение.

Подробнее здесь: https://stackoverflow.com/questions/789 ... ass-method

Вернуться в «Python»