Это то, что меня озадачивает, но я не могу получить однозначного ответа. Использование метода __ new __
(или, точнее, статического метода) в классах, производных от модели DJango.
Вот как в идеале следует использовать __ new __
(поскольку мы используем Django, мы можем предположить, что используется версия Python 2.x):
class A(object):
def __new__(self, *args, **kwargs):
print ("This is A's new function")
return super(A, self).__new__(self, *args, **kwargs)
def __init__(self):
print ("This is A's init function")
Создание экземпляра объекта из вышеуказанного класса работает как и ожидалось. Теперь, когда кто-то пытается сделать что-то подобное с классами, производными от моделей Django, происходит нечто неожиданное:
class Test(models.Model):
def __new__(self, *args, **kwargs):
return super(Test, self).__new__(self, *args, **kwargs)
Создание экземпляра объекта из вышеуказанного класса приводит к этой ошибке:
TypeError: несвязанный метод __new __ () должен вызываться с экземпляром Test в качестве первого аргумента (вместо него был получен экземпляр ModelBase)
.
Я не могу понять, почему это происходит (хотя я знаю, что некоторая классовая магия происходит за кулисами из-за фреймворка Django).
Мы будем благодарны за любые ответы.