Правильный способ инициализации класса Object () в Python с помощью * args и ** kwargs - PullRequest
3 голосов
/ 25 октября 2019

Я пробую свои силы в небольшой инициализации класса с *args и **kwargs в Python, и у меня возникает ошибка object has no attribute named x.

class APIViewActions():
    def __init__(self, *args, **kwargs):
        list = kwargs.get('list', False)
        create = kwargs.get('create', False)
        retrieve = kwargs.get('retrieve', False)
        update = kwargs.get('update', False)
        partial_update = kwargs.get('partial_update', False)
        destroy = kwargs.get('destroy', False)

    def retrieve_actions(self):
        actions = {}

        if self.list:
            actions['get'] = 'list'

        if self.create:
            actions['post'] = 'create'

        if self.retrieve:
            actions['get'] = 'retrieve'

        if self.update:
            actions['patch'] = 'update'

        if self.partial_update:
            actions['patch'] = 'partial_update'

        if self.destroy:
            actions['delete'] = 'destroy'

        return actions

APIViewActions = APIViewActions(delete=True)

Итак,когда это вызывается:

APIViewActions.retrieve_actions()

Я получаю следующую ошибку:

AttributeError: у объекта 'APIViewActions' нет атрибута 'list'

Конечно, self.list долженбыть False? По сути, я хочу, чтобы вызов APIViewActions () был свободно определен, например, он может быть вызван так:

APIViewActions = APIViewActions(delete=True)

APIViewActions = APIViewActions(list=true, delete=True)

Как этого достичь

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

self отсутствует в классе.

class APIViewActions():
    def __init__(self, *args, **kwargs):
        self.list = kwargs.get('list', False)
        self.create = kwargs.get('create', False)
        self.retrieve = kwargs.get('retrieve', False)
        self.update = kwargs.get('update', False)
        self.partial_update = kwargs.get('partial_update', False)
        self.destroy = kwargs.get('destroy', False)
1 голос
/ 25 октября 2019

Вы забыли self (имя используется в качестве соглашения) для ссылки на ваш экземпляр перед назначением атрибутов.

def __init__(self, *args, **kwargs): 
    self.list = kwargs.get('list', False) 
    self.create = kwargs.get('create', False) 
    self.retrieve = kwargs.get('retrieve', False) 
    self.update = kwargs.get('update', False) 
    self.partial_update = kwargs.get('partial_update', False) 
    self.destroy = kwargs.get('destroy', False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...