【发布时间】:2017-05-19 11:35:57
【问题描述】:
假设我有两个班级......
class A:
def __init__(self, *args, arg1="default1", arg2="default2"):
# Initialise class A
class B:
def __init__(self, arg3="default3", arg4="default4"):
# Initialise class B
每个类都有自己的关键字参数,一个有位置参数。
现在假设有一个函数为这些类中的每一个创建一个实例,使用它自己的参数来这样做:
def make_objs(*args, arg1="default1", arg2="default2", arg3="default3", arg4="default4"):
objA = ClassA(*args, arg1=arg1, arg2=arg2)
objB = ClassB(arg3=arg3, arg4=arg4)
在这里,我手动将函数接收到的关键字参数分配给正确的类。不过这有点乏味 - 我必须在函数定义中复制关键字,而更改类将意味着更改函数的参数。
理想情况下,我会这样做:
def make_objs(*args, **kwargs):
objA = ClassA(*args, **kwargs)
objB = ClassB(**kwargs)
每个类将采用所有关键字参数并仅提取与它相关的那些。当然,上面的代码实际上不会这样做,它会抛出一个异常,因为ClassA 不期望一个名为arg3 的参数。
有没有办法做到这一点?使函数以**kwargs 作为参数并确定哪些参数可以转到哪个类的某种方式?
【问题讨论】:
-
对于
class A中的constructor参数,在arg1和arg2之后添加*arg和**kwarg怎么样?class B也是如此。 -
问题:你打算什么时候解包
classA中的*args?您能否提供classA的constructor的完整定义?
标签: python initialization arguments keyword-argument