关于python:在类初始化期间传递参数

Passing arguments during Class Initialization

我正在为下面代码中的内容挠头。

1
2
3
4
5
6
7
8
class foo(object):
    def __init__(self,*args):
        print type(args)
        print args

j_dict = {'rmaNumber':1111, 'caseNo':2222}
print type(j_dict)
p = foo(j_dict)

它产生:

1
2
3
<type 'dict'>
<type 'tuple'>
({'rmaNumber': 1111, 'caseNo': 2222},)

在我看来,这段代码将dict转换成tuple!!有人能解释一下吗?


实际上,这是因为args是一个tuple来保存可变长度的参数列表。args[0]仍然是你的dict——没有转换。

有关argskwargs的更多信息,请参阅本教程(args的关键字版本)。


当使用*args时,所有位置参数都是"zipped"或"packed"在元组中。

我使用**kwargs,所有的关键字参数都被打包到字典中。

(实际上,名称argskwargs不相关,重要的是星号):-)

例如:

1
2
3
4
5
>>> def hello(* args):
...     print"Type of args (gonna be tuple): %s, args: %s" % (type(args), args)
...
>>> hello("foo","bar","baz")
Type of args (gonna be tuple): <type 'tuple'>, args: ('foo', 'bar', 'baz')

现在,如果你不"打包"那些参数就不会发生这种情况。

1
2
3
4
5
6
7
8
9
>>> def hello(arg1, arg2, arg3):
...     print"Type of arg1: %s, arg1: %s" % (type(arg1), arg1)
...     print"Type of arg2: %s, arg2: %s" % (type(arg2), arg2)
...     print"Type of arg3: %s, arg3: %s" % (type(arg3), arg3)
...
>>> hello("foo","bar","baz")
Type of arg1: <type 'str'>, arg1: foo
Type of arg2: <type 'str'>, arg2: bar
Type of arg3: <type 'str'>, arg3: baz

您也可以参考这个问题:以星号和双星号开头的python方法/函数参数