में मैंने एक कक्षा बनाई है जो ListView
और दो कस्टम मिश्रणों को उप-वर्गीकृत करता है जिन्होंने get_context_data
फ़ंक्शन लागू किया है। जब मैं निष्पादित MyListView
यह केवल "ListSortedMixin"
प्रिंटपायथन एकाधिक विरासत फ़ंक्शन ओवरराइडिंग और सूची दृश्य django
from django.views.generic import ListView
class ListSortedMixin(object):
def get_context_data(self, **kwargs):
print 'ListSortedMixin'
return kwargs
class ListPaginatedMixin(object):
def get_context_data(self, **kwargs):
print 'ListPaginatedMixin'
return kwargs
class MyListView(ListSortedMixin, ListPaginatedMixin, ListView):
def get_context_data(self, **context):
super(ListSortedMixin,self).get_context_data(**context)
super(ListPaginatedMixin,self).get_context_data(**context)
return context
: मैं बच्चे वर्ग पर इस समारोह को ओवरराइड करना चाहता था। किसी कारण से पाइथन MyListView.get_context_data
के स्थान पर ListSortedMixin.get_context_data
निष्पादित कर रहा है। क्यूं कर?
यदि मैं विरासत आदेश ListPaginatedMixin, ListSortedMixin, ListView
पर बदलता हूं, ListPaginatedMixin.get_context_data
निष्पादित किया जाता है।
मैं get_context_data
फ़ंक्शन को ओवरराइड कैसे कर सकता हूं?
इस मामले में 'सुपर (MyListView, self) .get_context_data (** संदर्भ)' 'ListSortedMixin.get_context_data (स्वयं, ** संदर्भ) 'जैसा ही है। मुझे लगता है कि [पिछले जवाब] (http://stackoverflow.com/a/9939867/959819) सही है: मुझे माता-पिता को एक-एक करके काम करने की ज़रूरत है। –
समस्या यह है कि आपके मिश्रित सुपर कॉल नहीं करते हैं। भले ही मिश्रित 'ऑब्जेक्ट' से उत्तराधिकारी हों, उन्हें सुपर कॉल करना चाहिए। एमआरओ (विधि संकल्प आदेश) में अगली वस्तु के लिए सुपर प्रतिनिधि, जो उस आदेश पर निर्भर करता है जिसमें वे MyListView की घोषणा में निर्दिष्ट किए गए थे। मैं इसे और अधिक स्पष्ट करने के लिए उपरोक्त मेरा उत्तर अपडेट करूंगा। –
बिल्कुल। इसलिए आपके उदाहरण में बुलाया गया विधि केवल 'ListSortedMixin' है। मुझे मैन्युअल रूप से सभी माता-पिता कार्यों को कॉल करने की आवश्यकता है। –