KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have renamed a python class that is part of a library. I am willing to leave a possibility to use its previous name for some time but would like to warn user that it's deprecated and will be removed in the future. I think that to provide backward compatibility it will be enough to use an alias like that: class NewClsName: pass OldClsName = NewClsName I have no idea how to mark the OldClsName as deprecated in an elegant way. Maybe I could make OldClsName a function which emits a warning (to logs) and constructs the NewClsName object from its parameters (using *args and **kvargs ) but it doesn't seem elegant enough (or maybe it is?). However, I don't know how Python standard library deprecation warnings work. I imagine that there may be some nice magic to deal with deprecation, e.g. allowing treating it as errors or silencing depending on some interpreter's command line option. The question is: How to warn users about using an obsolete class alias (or obsolete class in general). EDIT : The function approach doesn't work for me (I already gave it a try) because the class has some class methods (factory methods) which can't be called when the OldClsName is defined as a function. Following code won't work: class NewClsName(object): @classmethod def CreateVariant1( cls, ... ): pass @classmethod def CreateVariant2( cls, ... ): pass def OldClsName(*args, **kwargs): warnings.warn("The 'OldClsName' class was renamed [...]", DeprecationWarning ) return NewClsName(*args, **kwargs) OldClsName.CreateVariant1( ... ) Because of: AttributeError: 'function' object has no attribute 'CreateVariant1' Is inheritance my only option? To be honest, it doesn't look very clean to me - it affects clas
Tags (comma-separated)
Save Edits
Cancel