7
我正在使用Python 2.x框架,並且最近版本的框架已將一些廣泛使用的基類從模塊A
移動到模塊B
(以及類已經被重新命名爲更清晰的名字)。模塊A
爲新的類名定義了一個向後兼容的標識符。不贊成使用類作爲Python中的父類
B.py:
class BaseClass(object):
__metaclass__ = framework_meta # handles registration etc.
A.py:
import B
oldbase = B.BaseClass
現在,爲了幫助人們遷移自己的代碼,我想能夠發出DeprecationWarning
(使用警告。警告),只要使用框架的代碼定義了從A.oldbase
派生的類,就可以告訴程序員直接從B.BaseClass
繼承。
我希望這可以通過元類來實現。我想聲明一個新的元類從框架與元類衍生
class deprecated_base_class(framework_meta):
def __new__(meta, name, bases, attrs):
warning = '%(class)s is deprecated'
for b in bases:
warning = getattr(b, '__deprecation_warning__', None) or warning
warn(warning % {'class': name}, DeprecationWarning, stacklevel=2)
return super(deprecated_base_class, meta).__new__(meta, name, bases, attrs)
在一起:
A.py:
class oldbase(B.BaseClass):
__metaclass__ = deprecated_base_class
__deprecation_warning__ = 'class oldbase is deprecated. Use B.BaseClass instead'
clientcode.py
class FooBar(oldbase):
pass
這個問題我現在,是我得到一個DeprecationWarning
的定義oldbase
。我怎樣才能解決這個問題?