2


1

Pythonでは、メソッドオブジェクトのみを指定して、メソッドを含むクラスにアクセスすることは可能ですか?

私はPythonにはかなり慣れておらず、オンラインで検索してもこの質問に対する答えを見つけることができませんでした。

これは(まだ)何もしない例のデコレータです。

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

これがクラスの例です

class MyClass:
  my_var = []

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

私のデコレータでは、 MyClass`のクラスオブジェクトにアクセスし、 sometext 'を `MyClass.my_var`リストに追加したいです。 私の目標は、関数呼び出し時ではなく*モジュールロード時にmy_varに装飾値を入れることです。

これをするために私が f`から MyClass`にナビゲートできる方法はありますか? * args [0]がMyClassのインスタンスであることを私は知っていますが、それは関数が呼び出されたときにのみ利用可能です。

1 Answer


3


クラスがコンパイルされている間は「メソッド」は通常の機能であるため、クラスデコレータ内の関数から読み取ることはできません。 また、クラス名はコンパイル中に定義されていません。

できることは、デコレータに `+ my_var +`リストを提供することです。

class MyClass:
    my_var = []

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

`+ my_var +`はそれまではまだ通常の変数です。