dec*_*eze 7 python pycharm python-3.x
可以在Python/PyCharm中标记已弃用的类,如下所示:
class Foo:
def __init__(self):
warnings.warn('Use Bar instead.', DeprecationWarning)
Run Code Online (Sandbox Code Playgroud)
Foo现在任何试图实例化的代码都会被PyCharm标记为.Foo()
但是,继承该类不会:
class Baz(Foo):
pass
Run Code Online (Sandbox Code Playgroud)
有什么办法有声明的Baz标记以任何方式产生警告?
您可以使用元类来完成此任务。在 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
Run Code Online (Sandbox Code Playgroud)
请注意,在 PyCharm 之外,您可能看不到任何内容,因为默认情况下弃用警告处于关闭状态。
在 Python 3 中,将 Foo 更改为:
class Foo(metaclass=deprecated_metaclass('Use Bar instead.')):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |