Definiere die Klasse eines ungebundenen Methodenobjekts in Python 3

Say Ich möchte einen Dekorator für in einer Klasse definierte Methoden erstellen. Ich möchte, dass dieser Decorator beim Aufrufen ein Attribut für die Klasse festlegen kann, die die Methode definiert (um sie in einer Liste von Methoden zu registrieren, die einem bestimmten Zweck dienen).

n Python 2 wird dasim_classie @ -Methode macht das sehr gut:

def decorator(method):
  cls = method.im_class
  cls.foo = 'bar'
  return method

In Python 3 scheint jedoch kein solches Attribut (oder ein Ersatz dafür) zu existieren. Ich nehme an, die Idee war, dass Sie @ anrufen könnttype(method.__self__), um die Klasse zu erhalten, aber dies funktioniert nicht für ungebundene Methoden, da__self__ == None In diesem Fall

HINWEIS Diese Frage ist für meinen Fall eigentlich etwas irrelevant, da ich stattdessen ein Attribut für die Methode selbst festgelegt habe und die Instanz dann alle Methoden durchsucht, um zum richtigen Zeitpunkt nach diesem Attribut zu suchen. Ich benutze (derzeit) auch Python 2.6. Ich bin jedoch neugierig, ob es einen Ersatz für die Funktionalität von Version 2 gibt, und wenn nicht, aus welchem Grund sie vollständig entfernt wurde.

BEARBEITE: Ich habe gerade gefundendiese Frag. Dies lässt es so aussehen, als ob die beste Lösung darin besteht, es zu vermeiden, wie ich es getan habe. Ich frage mich immer noch, warum es entfernt wurde.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage