In Python ist es möglich, die Klasse zuzugreifen, die ein Verfahren enthält, da nur ein Methodenobjekt?

StackOverflow https://stackoverflow.com/questions/649329

  •  19-08-2019
  •  | 
  •  

Frage

Ich bin ziemlich neu in Python, und nicht in der Lage von der Suche online eine Antwort auf diese Frage zu finden.

Hier ist ein Beispiel Dekorateur, der nichts tut (noch)

def my_decorator(text):
  def wrap(f):
    # grab magic f.parent_class_object.my_var and append text
    def wrap_f(*args, **kwargs):
      f(*args, **kwargs)
    return wrap_f
  return wrap

Hier ist ein Beispiel der Klasse

class MyClass:
  my_var = []

  @my_decorator('sometext')
  def my_func()
    # do some super cool thing

In meinem Dekorateur mag Ich mag das Klassenobjekt für MyClass zuzugreifen und in ‚sometext‘ zur MyClass.my_var Liste hinzuzufügen. Mein Ziel ist es my_var mit geschmückten Werten bei Modullast Zeit, nicht Funktion Anrufzeit zu füllen.

Gibt es eine Weise, die ich von f navigieren kann, um MyClass dies zu tun? Ich weiß, dass * args [0] ist die Instanz von MyClass, aber das ist nur verfügbar, wenn die Funktion aufgerufen wird.

War es hilfreich?

Lösung

Es ist nicht möglich, sie aus einer Funktion innerhalb einer Klasse Dekorateur zu lesen, da die „Methoden“ noch normale Funktion sind, während die Klasse kompiliert wird. Auch hat der Klassenname nicht definiert worden ist, während es kompiliert wird.

Was Sie tun können, ist die my_var Liste der Dekorateur liefern.

class MyClass:
    my_var = []

    @my_decorator(my_var, 'sometext')
    def my_func()
        # do some super cool thing

my_var ist immer noch eine normale Variable bis dahin.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top