栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何修饰一个类的所有功能而不用为每个方法一遍又一遍地键入它?[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何修饰一个类的所有功能而不用为每个方法一遍又一遍地键入它?[重复]

使用遍历类属性并装饰可调用函数的函数来装饰类。如果您有可能恰好可以调用的类变量,并且还会修饰嵌套的类(请感谢Sven
Marnach指出这一点),那么这可能是错误的做法,但是通常这是一个非常干净且简单的解决方案。示例实现(请注意,这不会排除

__init__
可能需要或可能不需要的特殊方法(等)):

def for_all_methods(decorator):    def decorate(cls):        for attr in cls.__dict__: # there's propably a better way to do this if callable(getattr(cls, attr)):     setattr(cls, attr, decorator(getattr(cls, attr)))        return cls    return decorate

像这样使用:

@for_all_methods(mydecorator)class C(object):    def m1(self): pass    def m2(self, x): pass    ...

在Python 3.0和3.1中,

callable
不存在。它在Python 2.x中一直存在,并且在Python
3.2中作为的包装器而返回
isinstance(x,collections.Callable)
,因此您可以
callable
在那些版本中使用它(或使用此定义自己的替代品)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号