Was sind @events bei Python?

2 Antworten

Ereignisse sind die Konstrukte, die es einer Klasse ermöglichen, andere Klassen zu benachrichtigen, wenn etwas von Interesse stattfindet.

In der Laiensprache ist es im Grunde ähnlich wie das Hissen einer Flagge, um anderen zu signalisieren, dass etwas Interessantes passiert ist.

Wann werden Ereignisse in Python verwendet?

Ereignisbasierte Programmierung wird hauptsächlich bei der Arbeit mit UI (Benutzeroberfläche) verwendet, wo verschiedene Komponenten über ein bestimmtes Auftreten gemeldet werden müssen. Stellen Sie sich zum Beispiel einen Währungsumrechner vor, der die umgerechnete Währung in Feld 2 ausgeben muss, während der Benutzer einen Wert in Feld 1 eingibt.

Wie erfährt die Box2, dass der Benutzer etwas in die Box1 eingegeben hat und was bei der Antwort darauf zu tun ist?

Dies ist eines der grundlegendsten Beispiele für die ereignisbasierte Programmierung.

@event ist ein Decorator. Es erweitert deine Funktion also.

Du könntest den Ausdruck auch länger schreiben:

def someFunction():
  # ...

someFunction = event(someFunction)

Doch so:

@event
def someFunction():
  # ...

ist es kürzer.

Ein Decorator ist selbst (wie du in der Langform auch siehst) nur eine Funktion, die deine Funktion als Argument aufnimmt und später als Callback aufruft. Somit wären solche Logiken möglich:

current_time = 11

def go_to_work(callback):
  global current_time
  if current_time > 8 and current_time < 18:
    callback()
  else:
    print("Sleep")

@go_to_work
def work():
  print("Do some work.")

Je nachdem, welchen Wert du für current_time setzt, bekommst du folglich eine andere Ausgabe.

Im Fall von @event (von Discord) wird die dekorierte Funktion intern von der Discord-Bibliothek als Event-Handler registriert. Die Bibliothek selbst lauscht auf Events (wie das Eintrudeln einer Nachricht) und kann in dem Fall dann auf die registrierte Funktion zugreifen (sie also als Callback aufrufen).