首页 > 解决方案 > 如何将 self 参数设置为装饰器?

问题描述

有人能帮我吗?我有类似的东西:

class MyClass:
    def __init__(self, *, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

    @test_dec('some param', self.arg2)
    def test_func():


        pass

但它不起作用。那么,我该怎么self.arg2test_dec呢?

我想做类似的事情:

import socketio
sio = socketio.AsyncServer()

class MyClass: 
    def __init__(self, options): 
        self.options = options 

    @sio.on('connect', namespace=self.options['namespace']) 
    def func(): pass

标签: pythonclassargumentsdecorator

解决方案


您可以arg2通过以下引用访问装饰器self

def test_dec(param):
  def outer(f):
    def wrapper(_self):
      _val = _self.arg2
      #do something
    return wrapper
  return outer

class MyClass:
  def __init__(self, *, arg1, arg2):
    self.arg1 = arg1
    self.arg2 = arg2
  @test_dec('some param')
  def test_func(self):
    pass

推荐阅读