当我打印args时,我没有得到元组中的所有元素是什么原因。这里args [0]打印2而不是1。

时间:2016-07-15 21:29:11

标签: python python-2.7

def __init__(self, *args, **kwargs):
    a=[args,kwargs]
    print args
    print type(args)
    print type(kwargs)
    print a
__init__(1,2,3,4,5)

输出 -

(2, 3, 4, 5)
<type 'tuple'>
<type 'dict'>
[(2, 3, 4, 5), {}]

元组中的1个去哪里?在打印args上它应该返回(1,2,3,4,5)而不是(2,3,4,5)

3 个答案:

答案 0 :(得分:2)

其他答案是正确的,但也许这会更好地解释:

def foo(bar, *args):
    print('Bar is {bar}'.format(bar=bar))
    print('args is {args}'.format(args=args))

foo(1, 2, 3, 4, 5)

# Output:
# Bar is 1
# args is (2, 3, 4, 5)

令人困惑的部分是您为函数__init__命名并命名了第一个参数self。这些名称在类构造函数中很常见,当您调用构造函数(或对象上的任何方法)时,会有一个额外的第一个参数指向该对象。所以这段代码可以达到你的期望:

class Foo(object):
    def __init__(self, *args):
        print(args)

foo = Foo(1, 2, 3, 4, 5)

# Output:
# (1, 2, 3, 4, 5)

答案 1 :(得分:1)

在这种情况下,self将作为任何其他参数传递,因为__init__未绑定到任何类实例。 self需要1

请注意,self只是用于在类体中命名类实例的约定,并且在类或方法体外使用时没有特殊意义。这只是一个名字。

您还应该避免使用___thisnotation__非特殊方法来避免歧义。

因此,

__init__应该在一个类的主体中定义:

class MyClass:
    def __init__(self, *args, **kwargs):
        a=[args,kwargs]
        print args
        print type(args)
        print type(kwargs)
        print a

答案 2 :(得分:1)

您可以将您的方法粘贴在一个类中并获得预期的输出:

class Example:
    def __init__(self, *args, **kwargs):
        a=[args,kwargs]
        print args
        print type(args)
        print type(kwargs)
        print a

Example(1,2,3,4,5)