Dar*_*nin 11 python decorator python-3.x
我想将装饰器应用于类中的每个方法.我没有类的源代码,所以我不能直接应用装饰器.我想调用一些接受类的函数并添加装饰器.
但问题是testclass.__dict__
一个mappingproxy
对象,它至少不直接支持任何赋值或修改.那么问题是如何避免这种刺激性限制并应用装饰器?
以下是尝试失败的代码:
class qwer:
def test(self):
print('test')
def decor(func):
def w(*args, **named_args):
print('decor')
func(*args, **named_args)
return w
qwer.__dict__['test'] = decor(qwer.__dict__['test'])
Run Code Online (Sandbox Code Playgroud)
错误:
TypeError: 'mappingproxy' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
用于setattr
在类上设置属性:
>>> setattr(qwer, 'test', decor(qwer.__dict__['test']))
>>> qwer.test
<function decor.<locals>.w at 0xb5f10e3c>
Run Code Online (Sandbox Code Playgroud)
演示:
>>> class A:
pass
...
>>> A.__dict__['foo'] = 'bar'
Traceback (most recent call last):
File "<ipython-input-117-92c06357349d>", line 1, in <module>
A.__dict__['foo'] = 'bar'
TypeError: 'mappingproxy' object does not support item assignment
>>> setattr(A, 'foo', 'bar')
>>> A.foo
'bar'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6910 次 |
最近记录: |