使用 *args 和 **kwargs 在 Python 中初始化 class Object() 的正确方法
Correct way to initialise a class Object() in Python with *args and **kwargs
我正在尝试 class 初始化,使用 *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)
这将如何实现?
您在分配属性之前忘记了 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)
self
在 class 中缺失。
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)
我正在尝试 class 初始化,使用 *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)
这将如何实现?
您在分配属性之前忘记了 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)
self
在 class 中缺失。
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)