python中类内的传递和访问参数使用*args

python中类内的传递和访问参数使用*args,python,Python,我有一个类,在这个类中,我使用*args在init函数中传递变量。 这些参数必须是user、url和user_key,我必须对传递的参数进行一些输入验证 def __init__(self, *args): """init method for the class.""" print args if args[0] is not None: self.user = user print(self.user) if args[1] i

我有一个类,在这个类中,我使用*args在init函数中传递变量。 这些参数必须是user、url和user_key,我必须对传递的参数进行一些输入验证

def __init__(self, *args):
    """init method for the class."""
    print args
    if args[0] is not None:
        self.user = user
        print(self.user)
    if args[1] is not None:
        self.url = url
        print(self.url)
    if args[2] is not None:
        self.user_key = user_key
        print(self.user_key)
但是当我试图打印这些值时,它们不会被打印出来。 是否有其他方法访问这些变量? 我得到下面的错误

    self.user = user
NameError: global name 'user' is not defined

您正在对None进行检查您正在打印它们,您应该检查值是否等于None,并且您正在打印未固定变量
用户
,而不是将
self.user
分配给
参数[索引]

此外,如果未提供参数,则应添加try和catch:

def __init__(self, *args):
    """init method for the class."""
    print args
    try:
        if args[0] is not None:
           self.user = args[0]
           print(self.user)
    except IndexError:
        print('No arguments  provided')

如果需要将关键字参数传递给函数,请改用类似于
**kwargs
的参数,然后传递给函数且未被命名关键字参数捕获的所有关键字参数将存储在名为
kwargs
的dict中。因此,如果您需要访问参数
user
,只需使用
kwargs['user']

def __init__(self, **kwargs):
    """init method for the class."""
    print(kwargs)
    if 'user' in kwargs:
        self.user = kwargs['user']
        print(self.user)
    if 'urlin' kwargs:
        self.url = kwargs['url']
        print(self.url)
    if 'user_keyin' kwargs:
        self.user_key = kwargs['user_key']
        print(self.user_key)

如果您已经知道有多少个参数以及它们应该代表什么,那么为什么要使用
*args
?您可以只分配默认值
None
value@poobear如果kwargs:NameError:全局名称“user”中的用户未定义,则应在args[0]中传递该值这是我得到的错误