在python中实例化对象

时间:2012-03-27 19:36:08

标签: python

我有一个我要实例化的python类,__init__定义有很多参数(10+)。是否有一种干净的方式来实例化__init__需要大量参数的类?

例如:

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"....)

有更清洁的方法吗?喜欢传词或其他什么?或者更好的是,是否有预期的惯例?

4 个答案:

答案 0 :(得分:7)

是的,您可以使用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教程的unpacking argument lists部分。

另外,//不是Python中的评论,它是分区。 #是评论。对于多行评论,'''You can use triple single quotes'''"""triple double quotes"""

答案 1 :(得分:5)

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

您可以使用字典为字典添加前缀**来指定关键字参数,例如:

options = {
    "param1": "foo",
    "param2": "bar",
    "param3": "baz"
}

my_a = A(**options)

如果您要一次定义所有值,那么使用字典并不能直接指定它们,同时使用额外的空格来表示它们:

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

答案 2 :(得分:3)

向构造函数传递太多参数并不好。但如果你想这样做,试试:

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)

答案 3 :(得分:1)

一般来说,拥有那么多参数往往是一个类太复杂而且应该分开的标志。

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