有人可以帮助我吗? 我有类似的东西:
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
答案 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