python – decorator,用于在命名空间中生成新类
发布时间:2020-12-20 11:05:54 所属栏目:Python 来源:网络整理
导读:我需要它的具体用例是弃用类名. 假设我们在早期版本中有A类,我们想要弃用其名称但保持向后兼容性: class A(B): def __init__(self,*args,**kwargs): warnings.warn('deprecation!') super(A,self).__init__(*args,**kwargs) ……而B现在有正确的实施. 当我
我需要它的具体用例是弃用类名.
假设我们在早期版本中有A类,我们想要弃用其名称但保持向后兼容性: class A(B): def __init__(self,*args,**kwargs): warnings.warn('deprecation!') super(A,self).__init__(*args,**kwargs) ……而B现在有正确的实施. 当我们创建A类时,我们将在此处遇到弃用警告.我们也可以在__init__上使用已弃用的模块用于装饰器. 但是,我想跳过这个过程并编写更少的代码,并希望实现如下: @deprecated_alias('A') class B: # ... do something 我可以以某种方式将类名注入模块级命名空间,以便我可以像这样使用A吗? 解决方法
虽然这并不是你所要求的,但它实际上不那么神奇,而且最终的代码行数也相同.它也更明确:
import warnings def deprecated(DeprecatedByClass): class Deprecated(DeprecatedByClass): def __new__(cls,**kwargs): warnings.warn("deprecation!") return super(Deprecated,cls).__new__(cls,**kwargs) return Deprecated 然后您可以像这样使用它: class B: pass A = deprecated(B) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |