super()参数1必须是type,而不是None

时间:2011-06-24 21:36:52

标签: python django

我的django应用程序中的一个模块中的类在使用super ...

构建自身时遇到了问题
class LinkshareExternalAffiliateProperties(AffiliateExternalProperties):

    def __init__(self, aggregator_affiliate_id, account_username, account_password, api_token):
        super(LinkshareExternalAffiliateProperties, self).__init__(aggregator_affiliate_id)
        self.account_username = account_username
        self.account_password = account_password
        self.api_token = api_token

class AffiliateExternalProperties(object):

    def __getattribute__(self, attr):
        sources = super(AffiliateExternalProperties, self).__getattribute__('__sources__')
        if attr in sources:
            return self.get(attr)
        else:
            return super(AffiliateExternalProperties, self).__getattribute__(attr)

当调用代码时,我得到一个错误:super()参数1必须是type,而不是None LinkshareExternalAffiliateProperties如何在此处评估为无?它是这个新实例的类!目前,同一模块中的其他类也不可用。

一些有趣的事情(这整个事情令人费解,但整个故事的某些部分可能是造成问题的原因......):

class Aggregator(models.Model):
    foo = columns

    @property
    def proxy(self):
        if self.name == 'Linkshare':
            return Linkshare.objects.get_instance()
        elif self.name == 'Commission Junction':
            return CommissionJunction.objects.get_instance()
        elif self.name == 'Share-A-Sale':
            return ShareASale.objects.get_instance()
        else:
            raise Exception('Invalid aggregator name "%s".  Excpected Linkshare, Commission Junction, or Share-A-Sale.' % self.name)


class Linkshare(models.Model):

    def affiliate_properties(self, aggregator_affiliate_id):
        return LinkshareExternalAffiliateProperties(aggregator_affiliate_id, self.username, self.password)


class Affiliate(models.Model):
    foo = columns

    def get_external_properties():
        return self.aggregator.proxy.get_external_properties(self.aggregator_affiliate_id)

class MyView(self):

    def view(self, request):
        affiliate = get_object_or_404(Affiliate, pk=id)
        properties = affiliate.get_external_properties()
        return render_to_response('admin/affiliates/affiliate/affiliate_scrape_ajax.html', dict(scrape=properties))

在浏览器中点击/查看会引发错误...

踢球者,运行此代码当然它可以很好地完成错误。

当我使用gunicorn& amp; nginx,它搞砸了。

2 个答案:

答案 0 :(得分:0)

在声明之后检查您是否未分配课程。以下将导致您看到的错误:

class foo(object):
    def x(self):
        print "foo"

class bar(foo):
    def x(self):
        super(bar, self).x()

baz = bar
bar = None

a = baz()
a.x()

答案 1 :(得分:0)

Gunicorn有一个错误:

django run_gunicorn +重新加载

  

使用Django'un_gunicorn'命令修复重载的一种可能性     manage.py会考虑重新加载== reexec。所以我们正在制作     确定我们重新加载所有模块。但是使用此解决方案,进程ID将会     如果他们改变了,一些主管可能无法检测到变化     没有使用pidfile。 (换句话说,我们应该强烈建议     如果他们想要HUP支持,人们可以使用gunicorn_django命令。)

https://github.com/benoitc/gunicorn/issues/222