如何将自变量设置为装饰器?

时间:2018-09-06 10:43:35

标签: python class arguments decorator

有人可以帮助我吗? 我有类似的东西:

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

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


        pass

但是它不起作用。 那么,如何将self.arg2放入test_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

2 个答案:

答案 0 :(得分:0)

一开始什么都没有时,就没有self。如果您想这样做,则应该执行以下操作:

class MyClass:
    arg = 'something'       

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

    @test_dec('some param', arg)
    def test_func():
        pass

但是启动类剂量后的值会影响装饰器。您应该使用arg装饰班级。


或正如Aran-Fey所说,请将此link签出,这将帮助您装饰您的班级。

答案 1 :(得分:0)

您可以通过引用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