Перед тем, как пометить его как дубликат, позвольте мне сказать, что я понимаю, как супер работает, и я прочитал эти три ссылки:вызова супер на базовый класс питона/Джанго
What does 'super' do in Python?
Understanding Python super() with __init__() methods
http://python-history.blogspot.nl/2010/06/method-resolution-order.html
Это как super
должен работать в случае baseclasses
:
class X(object):
def __init__(self):
print "calling init from X"
super(X, self).__init__()
class Y(object):
def abc(self):
print "calling abc from Y"
super(Y, self).abc()
a = X()
# prints "calling init from X" (works because object possibly has an __init__ method)
b = Y()
b.abc()
# prints "calling abc from Y" and then
# throws error "'super' object has no attribute 'abc'" (understandable because object doesn't have any method named abc)
Вопрос: В реализации django
основных местах есть несколько мест, где они звонят methods
с использованием super
по классам, наследующим от object
(случай Y
в моем примере выше). Например: может ли кто-нибудь объяснить мне, почему этот код работает?
from django.core.exceptions import PermissionDenied
class LoginRequiredMixin(object):
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated():
raise PermissionDenied
return super(LoginRequiredMixin, self).\
dispatch(request, *args, **kwards) # why does this work?
Ref: скопировал этот код из этого разговора: https://youtu.be/rMn2wC0PuXw?t=403
Спасибо за ваш ответ. То, что вы говорите, имеет какой-то смысл, но я серьезно сомневаюсь, что «джанго» это делает. Если бы это было так, им пришлось бы реализовать много таких 'abc' .. Кроме того, я не мог найти ничего подобного в' django' github repo –
Вы правы, разработчики Django - хорошие мальчики. Я извиняюсь перед тем, кого я мог обидеть, подразумевая, что они возились со встроенными людьми. Код в презентации либо не работает, либо тот, кто сделал презентацию, запутанную со встроенными. – zwer