在python中实例化对象

在python中实例化对象,python,Python,我想实例化一个python类,\uuuu init\uuu定义有很多参数(10+)。有没有一种干净的方法来实例化一个\uuuu init\uuuu需要很多参数的类 例如: class A(object): def __init__(self, param1, param2, param3,...param13): // create an instance of A my_a = new A(param1="foo", param2="bar", param3="hello

我想实例化一个python类,
\uuuu init\uuu
定义有很多参数(10+)。有没有一种干净的方法来实例化一个
\uuuu init\uuuu
需要很多参数的类

例如:

class A(object):

    def __init__(self, param1, param2, param3,...param13):
    // create an instance of A


my_a = new A(param1="foo", param2="bar", param3="hello"....)
options = {
    "param1": "foo",
    "param2": "bar",
    "param3": "baz"
}

my_a = A(**options)

有没有更干净的方法?比如递字典什么的?或者更好,是否存在预期约定?

是的,您可以使用
dict
来收集参数:

class A(object):
    def __init__(self, param1, param2, param3):
        print param1, param2, param3


params = {'param1': "foo", 'param2': "bar", 'param3': "hello"}
# no 'new' here, just call the class
my_a = A(**params)
请参阅Python教程的一节


另外,
/
在Python中不是注释,而是楼层划分
#
是一个注释。对于多行注释,
“您可以使用三个单引号”
“三个双引号”

Python中没有
新的
关键字。您只需像调用函数一样调用类名

您可以使用字典指定关键字参数,方法是在字典前面加上
**
,例如:

class A(object):

    def __init__(self, param1, param2, param3,...param13):
    // create an instance of A


my_a = new A(param1="foo", param2="bar", param3="hello"....)
options = {
    "param1": "foo",
    "param2": "bar",
    "param3": "baz"
}

my_a = A(**options)
如果要一次定义所有值,那么使用字典与直接指定值相比并没有任何优势,而使用额外的空白来表示clairity:

my_a = A(
    param1 = "foo",
    param2 = "bar",
    param3 = "baz"
)

通常,拥有这么多参数通常是一个类太复杂的标志,应该拆分


如果这不适用,请向上传递字典或特殊参数对象。

向构造函数传递太多参数是不好的。但如果您想这样做,请尝试:

class A(object):
    def __init__(self, *args,**kwargs):
        """
        provide list of parameters and documentation
        """
        print *args, **kwargs
params = {'param1': "foo", 'param2': "bar", 'param3': "hello"}
a = A(**params)

为什么init有这么多参数?我真的希望你的参数不是这样命名的!您不应该将其称为
args
,Python中的惯例是将
args
作为位置参数列表,而不是
dict
@agf谢谢您的建议。我改变了它。关于一次定义所有参数——如果要在多个位置使用相同的参数,如果使用
dict
,只需在代码中包含它们一次。