在Python中,是否可以访问包含方法的类,只给出方法对象?

时间:2009-03-16 05:08:54

标签: python decorator

我对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 个答案:

答案 0 :(得分:3)

无法从类装饰器中的函数读取它,因为在编译类时,“方法”仍然是正常函数。此外,在编译时尚未定义类名。

您可以做的是向装饰者提供my_var列表。

class MyClass:
    my_var = []

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

my_var仍然是一个正常的变量。