我可以将 python **kwargs 从 sub 传递给父类吗?
Posted
技术标签:
【中文标题】我可以将 python **kwargs 从 sub 传递给父类吗?【英文标题】:Can I pass python **kwargs to parent class from sub? 【发布时间】:2012-12-29 01:38:43 【问题描述】:我想做这样的事情:
class A(object):
def __init__(self, **kwargs):
"""
return exception if certain arguments not set
"""
class B(A):
def __init__(self, **kwargs):
super(B, self).__init__(**kwargs)
基本上,每个子类都需要正确实例化某些参数。它们在所有方面都是相同的参数。我只想检查这些参数一次。如果我可以从父 init() 执行此操作,那就更好了。
可以这样做吗?
【问题讨论】:
【参考方案1】:当然。这种模式并不少见:
class A(object):
def __init__(self, foo, bar=3):
self.foo = foo
self.bar = bar
class B(A):
def __init__(self, quux=6, **kwargs):
super(B, self).__init__(**kwargs)
self.quux = quux
B(foo=1, quux=4)
这也使您与super
shenanigans 有所隔离:现在A
的argspec 可以更改而无需对B
进行任何编辑,并且钻石继承不太可能中断。
【讨论】:
请注意,您可以用A(1,3)
实例化A
对象,但不能用B(1,3)
甚至B(1,3,4)
实例化B
对象【参考方案2】:
当然。当输入参数和关键字参数时,参数和关键字扩展将自然地起作用。
【讨论】:
以上是关于我可以将 python **kwargs 从 sub 传递给父类吗?的主要内容,如果未能解决你的问题,请参考以下文章