Hier drei Varianten:
Code: Alles auswählen
import warnings
class NeueAPI(object):
def test(self):
print("NeueAPI: ok\n")
class AlteAPI1(object):
def __new__(cls, *args, **kwargs):
warnings.warn("Du nutzt AlteAPI1 !", FutureWarning, stacklevel=2)
return NeueAPI()
class AlteAPI2(NeueAPI):
def __new__(cls, *args, **kwargs):
warnings.warn("Du nutzt AlteAPI2 !", FutureWarning, stacklevel=2)
return NeueAPI.__new__(cls, *args, **kwargs)
class AlteAPI3(NeueAPI):
def __new__(cls, *args, **kwargs):
warnings.warn("Du nutzt AlteAPI3 !", FutureWarning, stacklevel=2)
return super(AlteAPI3, cls).__new__(cls, *args, **kwargs)
if __name__ == "__main__":
NeueAPI().test()
AlteAPI1().test()
AlteAPI2().test()
AlteAPI3().test()Allerdings funktioniert in meinem echten Code (ein django.models.Field) nur die erste Variante. Bei den anderen Beiden erhalte ich den Fehler: TypeError: object() takes no parametersNeueAPI: ok
test.py:34: FutureWarning: Du nutzt AlteAPI1 !
AlteAPI1().test()
NeueAPI: ok
test.py:35: FutureWarning: Du nutzt AlteAPI2 !
AlteAPI2().test()
NeueAPI: ok
test.py:36: FutureWarning: Du nutzt AlteAPI3 !
AlteAPI3().test()
NeueAPI: ok
