我正在研究a patch for django-localeurl,我遇到了困惑我的问题。为了测试我的补丁添加的功能,我添加了触发这个错误,当我运行它们的Django主干(与旧版本没有问题)测试:未绑定的方法__init __()必须使用LocaleRegexProvider实例作为第一个参数调用(取而代之的是RegexURLPattern实例)
Traceback (most recent call last):
File "/home/al/dev/projects/django-localeurl/localeurl/tests/tests.py", line 498, in test_change_locale_check_session_disabled
self.client.post('/change/', data={'locale': 'de', 'next': '/foo'})
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/test/client.py", line 449, in post
response = super(Client, self).post(path, data=data, content_type=content_type, **extra)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/test/client.py", line 262, in post
return self.request(**r)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/test/client.py", line 381, in request
response = self.handler(environ)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/test/client.py", line 84, in __call__
response = self.get_response(request)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/core/handlers/base.py", line 179, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/core/handlers/base.py", line 224, in handle_uncaught_exception
if resolver.urlconf_module is None:
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/core/urlresolvers.py", line 323, in urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/al/dev/projects/django-localeurl/localeurl/urls.py", line 5, in <module>
url(r'^change/', change_locale, name='localeurl_change_locale'),
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/conf/urls/__init__.py", line 60, in url
return RegexURLPattern(regex, view, kwargs, name)
File "/home/al/dev/projects/django-localeurl/.tox/py26-trunk/lib/python2.6/site-packages/django/core/urlresolvers.py", line 172, in __init__
LocaleRegexProvider.__init__(self, regex)
TypeError: unbound method __init__() must be called with LocaleRegexProvider instance as first argument (got RegexURLPattern instance instead)
但是当我读到the code that triggers this exception,我不能看看如何发生。为了了解情况,我加入了线以上这些打印语句其中基础__init__
被称为:
print
print "self.__class__:", self.__class__
print "self.__class__.__bases__:", self.__class__.__bases__
print "isinstance(self, LocaleRegexProvider):", isinstance(self, LocaleRegexProvider)
print
LocaleRegexProvider.__init__(self, regex)
在某些情况下,这给了我预期的输出:
self.__class__: <class 'django.core.urlresolvers.RegexURLPattern'>
self.__class__.__bases__: (<class 'django.core.urlresolvers.LocaleRegexProvider'>,)
isinstance(self, LocaleRegexProvider): True
但在某些情况下,给我这个奇怪的结果:
起初我以为的Django的其他部分可能是动态变化的基类的实例(此处称为self
),致电LocaleRegexProvider.__init__
时会引发异常。我的假设似乎被isinstance
的结果证实,但打印出__bases__
与此相矛盾。我认为如果LocaleRegexProvider
在基类列表中,isinstance
应该总是返回True
。我在这里错过了什么?