проблема наследования python / django - PullRequest
0 голосов
/ 12 декабря 2018

У меня проблема с переопределением функции наследования классов 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, из-за которой некоторые функции родительского класса не переопределяются?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...