【问题标题】:In Python, is it possible to access the class which contains a method, given only a method object?在 Python 中,是否可以访问包含方法的类,只给定一个方法对象?
【发布时间】:2010-10-13 13:19:46
【问题描述】:

我对 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 的实例,但只有在调用函数时才可用。

【问题讨论】:

    标签: python decorator


    【解决方案1】:

    无法从类装饰器内的函数中读取它,因为在编译类时“方法”仍然是普通函数。另外,在编译的时候还没有定义类名。

    您可以做的是将my_var 列表提供给装饰器。

    class MyClass:
        my_var = []
    
        @my_decorator(my_var, 'sometext')
        def my_func()
            # do some super cool thing
    

    my_var到那时还是一个普通变量。

    【讨论】:

      猜你喜欢
      • 2023-01-25
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多