Использование __new__ в классах, производных от моделей Django, не работает

Это то, что меня озадачивает, но я не могу получить однозначного ответа. Использование метода __ 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).

Мы будем благодарны за любые ответы.

6
задан Ben 2 February 2012 в 00:23
поделиться