Python中使用*args和**kwargs正确初始化类对象的方法是什么?

3

我正在尝试使用Python的*args**kwargs进行一些类初始化,但是我遇到了一个对象没有名为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) 如何实现这一点?

1
你在__init__行中缺少对实例的引用,如 self.list = kwargs.get('list', False) - jfaccioni
2个回答

4

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
你忘记了在给属性赋值之前使用惯例命名的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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接