У меня проблема с переопределением функции наследования классов Python 3 и django.Мои классы выглядят примерно так.
class A(GenericAPIView):
def _post(self, request, pk=None, *args, **kwargs):
raise NotImplementedError
def _put(self, request, pk=None, *args, **kwargs):
raise NotImplementedError
def _get(self, request, pk=None, *args, **kwargs):
raise NotImplementedError
def post(self, request, pk=None, *args, **kwargs):
try:
return self._post(request, pk=pk, *args, **kwargs)
except ChunkedUploadError as error:
return Response(error.data, status=error.status_code)
def put(self, request, pk=None, *args, **kwargs):
try:
return self._put(request, pk=pk, *args, **kwargs)
except ChunkedUploadError as error:
return Response(error.data, status=error.status_code)
class B(A):
def _put(self, request, pk=None, *args, **kwargs):
finalized = self.finalize(pk, request, *args, **kwargs)
print('do put stuff here')
return (finalized)
def _post(self, request, pk=None, *args, **kwargs):
finalized = self.finalize(pk, request, *args, **kwargs)
print('do post stuff here')
return (finalized)
def finalize(pk, request, *args, **kwargs):
return('placeholder for finalize stuff')
class C(B):
def finalize(pk, request, *args, **kwargs):
return('doing my special finalize stuff here')
c_put = C.put (pk, request, * args, ** kwargs). Если я печатаю c_put, я получаю "делать свои специальные вещи финализации здесь"
c_post = C.post (pk, request, * args, ** kwargs) Если я печатаю c_post, я получаю «заполнитель для вещей финализации»
Что происходит, я не могу переопределить функцию финализации, если сообщениеназывается.Если я сделаю запрос пут на мой API, я вижу в журналах «делаю мой специальный финализатор здесь».Если я отправляю запрос на публикацию, я вижу «заполнитель для завершения».
Мой следующий шаг - переопределить функцию публикации для тестирования, и я не могу.Я могу переопределить пут просто отлично.Я много тестировал и не понимаю, почему я не могу переопределить функцию post.Пихарм считает, что функция переопределяется в пользовательском интерфейсе.Я могу переопределить любую другую функцию в родительском классе.Я могу включить отладку и установить точки останова в переопределенных функциях и их родителях.Переопределенный пост просто не сработает.Более того, переопределенная функция finalize () не сработает после пост-вызова, но сработает, если будет вызван пут.
Мой вопрос таков: есть ли какая-то магия django или какая-то проблема с python3, из-за которой некоторые функции родительского класса не переопределяются?