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)
答案 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)