【发布时间】:2020-08-22 02:00:19
【问题描述】:
代码如下:
def some_function1():
pass
def some_function2():
pass
def some_function3():
pass
def some_function4():
pass
class ReporterClass():
def __init__(self, data_reporter):
self.data_reporter = data_reporter
class ParentClass():
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
self.datacollector = ReporterClass(data_reporter={
'Report info 1': some_function1,
'Report info 2': some_function2,
'Report info 3': some_function3,
})
class ChildClass(ParentClass):
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
self.datacollector = ReporterClass(data_reporter={
'Report info 1': some_function1,
'Report info 2': some_function2,
'Report info 3': some_function3,
'Report info 4': some_function4,
})
这在这个玩具示例中运行良好,但我在实际代码中遇到的问题是__init__() 中有很多参数,例如param1...param100。同样,data_reporter 中有很多字典项,例如,Report info 1 ... Report info 100。我喜欢通过将'Report info 4': some_function4 添加到ChildClass 中的self.datacollector 来简单地进行修改,而不必完全覆盖父级的__init__() 并且不必重复所有参数代码。任何提示或建议将不胜感激。
--- 编辑 ---
要详细解释。根据建议,我会将子类创建为ChildClass1。但是,我的类在初始化中有很多参数。我不仅需要将它们全部写在子班'__init__() 中,我还需要在super().__init__() 中“重复”它们。所以我想知道是否有更方便和优雅的方式不必重复自己。 ChildClass2 之类的东西?
class ChildClass1(ParentClass):
def __init__(self,
param1,
param2,
., # Very long list of parameters
.,
.,
param100,
):
super().__init__(
param1,
param2,
., # Very long list of parameters
.,
.,
param100
)
self.datacollector.data_reporter['Report info 4'] = some_function4
class ChildClass2(ParentClass):
def __init__(self, *args):
some_var_to_store_parent_init_params = super().__init__.attr
for param in some_var_to_store_parent_init_params:
# somehow assign it back to ChildClass' args
super().__init__(some_var_to_store_parent_init_params)
self.datacollector.data_reporter['Report info 4'] = some_function4
【问题讨论】:
标签: python-3.x class oop inheritance initialization