我有一个我要实例化的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"....)
有更清洁的方法吗?喜欢传词或其他什么?或者更好的是,是否有预期的惯例?
答案 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)
一般来说,拥有那么多参数往往是一个类太复杂而且应该分开的标志。
如果不适用,请传递字典或特殊参数对象。