加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读