将类标记为已弃用,因此继承类在PyCharm中标记

时间:2015-08-31 13:46:11

标签: python python-3.x pycharm

可以在Python / PyCharm中标记弃用的类,如下所示:

class Foo:
    def __init__(self):
        warnings.warn('Use Bar instead.', DeprecationWarning)

现在任何试图实例化Foo的代码都会被PyCharm正确标记为 Foo()

但是,继承该类不会:

class Baz(Foo):
    pass

有没有办法让Baz声明以任何方式标记为弃用警告?

1 个答案:

答案 0 :(得分:0)

您可以使用元类来完成此任务。在Python 2.7中:

import warnings

def deprecated_metaclass(message):
    class DeprecatedMetaclass(type):
        def __init__(cls, name, bases, dct):
            if not hasattr(cls, '__metaclass__'):
                cls.__metaclass__ = DeprecatedMetaclass
            if any(getattr(base, '__metaclass__', None) == DeprecatedMetaclass
                    for base in bases):
                warnings.warn(message, DeprecationWarning, stacklevel=2)
            super(DeprecatedMetaclass, cls).__init__(name, bases, dct)

class Foo(object):
    __metaclass__ = deprecated_metaclass('Use Bar instead.')

class Bar(Foo):
    pass

请注意,在PyCharm之外,您可能看不到任何内容,因为默认情况下关闭了弃用警告。

在Python 3中,将Foo更改为:

class Foo(metaclass=deprecated_metaclass('Use Bar instead.')):
    pass