【发布时间】:2012-02-01 17:31:31
【问题描述】:
这让我感到困惑,但我无法得到明确的答案。在从 DJango 模型派生的类中使用__new__ 方法(或更准确地说,静态方法)。
这就是__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: unbound method __new__() must be called with Test instance as first argument (got ModelBase instance instead)。
我不明白为什么会发生这种情况(尽管我知道由于 Django 框架而在幕后发生了一些类魔法)。
我们将不胜感激。
【问题讨论】:
-
首先,你需要清理你的代码。在最后一个 sn-p 中,应该是
test还是Test?此外,您的缩进已关闭。 -
是的,
return super(test, self)...应该是return super(Test, sefl)...。 -
大家好 - 抱歉,我在编辑器中输入的示例非常快(我没有在编辑器中复制和粘贴代码) - 因此为不正确深表歉意。即使考虑到您的上述两个 cmets,它仍然不起作用。顺便说一句:我已经修复了上面的代码 sn-ps。
-
models.Model.__new__(Test, *args, **kwargs)工作吗? -
不幸的是,我仍然得到同样的错误:(
标签: python django django-models