2015-08-31 23 views
6

Böyle Python/pycharm kullanımdan kaldırılmış sınıflar işaretlemek mümkündür:pycharm işaretlenmiştir

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

şimdi uygun olarak pycharm tarafından işaretlenecektir Foo örneğini çalışan bütün kod Foo() .

Ancak, sadece sınıf olmaz devralan:

class Baz(Foo): 
    pass 

herhangi bir şekilde bir kullanımdan kaldırılması uyarı ile işaretlenmiş beyanı Baz ait için herhangi bir yolu var mı?

+0

Olası kopyalar (http://stackoverflow.com/questions/9008444/how-to-warn [sınıfı (isim) kullanımdan kaldırılması konusunda uyarmak için nasıl] -Yaklaşık sınıf-ad-kullanımdan kaldırılması) – Jerzyk

cevap

0

Bunu yapmak için bir metaclass kullanabilirsiniz. Python 2.7 olarak: kullanımdan kaldırma uyarıları varsayılan olarak kapalıdır, çünkü

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 

Not pycharm o dışarıda bir şey göremeyebilirsiniz.

Python 3, için Foo değiştirin:

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