python - 列出来自 functool 部分的装饰器方法
问题描述
我有来自https://stackoverflow.com/a/46361833/5316326的这个类方法装饰器,它接受参数。
如何列出在创建的对象上使用此装饰器的类方法?
from functools import update_wrapper, partial
def my_decorator(name):
class MyDecorator(object):
def __init__(self, func):
update_wrapper(self, func)
self.func = func
def __get__(self, obj, objtype):
"""Support instance methods."""
return partial(self.__call__, obj)
def __call__(self, obj, *args, **kwargs):
return self.func(obj, *args, **kwargs)
return MyDecorator
class MyClass(object):
t=12
@my_decorator("hee")
def my_method(self, a):
print(a+self.t)
以下尝试有效,但通过将部分函数解析为字符串,应该有一个正确的实现:
def find_my_decorators(cls):
def g():
for name in dir(cls):
attr = getattr(cls, name)
if isinstance(attr, partial) and 'MyDecorator' in str(attr.func):
yield name
return [name for name in g()]
但是,它给出了预期的结果:
>>> find_my_decorators(MyClass)
['my_method']
>>> m = MyClass()
>>> m.my_method(a=12)
>>> find_my_decorators(m)
['my_method']
它既适用于作为对象的类。
解决方案
将其发布为解决方案,因为我还不能发表评论。可能会重蹈覆辙。
推荐阅读
- dart - 如何在 Flutter 中获得没有反射的“构造函数”或工厂
- ios - 如何获得 UITouch 强度
- android - 如何在广播接收器中使用配对的蓝牙设备数据打开应用程序
- r - R中的unicode问题
- java - 是否可以使用它的注释类读取变量值
- javascript - ReactJS 使用内容脚本而不弹出(Chrome 扩展)
- android - Firebase setPersistence (true) 逻辑错误
- django - 如何在 drf 中序列化 Hstore 字段
- codeigniter - CodeIgniter 4 动态路由
- django - 根据某个 group_name 过滤 ForeignKey(user) 模型