python - 覆盖子 __init__ 函数的正确方法是什么?
问题描述
给定这样的子父结构:
class Parent:
def __init__(self, param1=1, param2=2, param3=3, param4=4):
"""
Parent docstring here
:param param1: param1 stuff
:param param2: param2 stuff
:param param3: param3 stuff
:param param4: param4 stuff
"""
self.param1 = param1
self.param2 = param2
self.param3 = param3
self.param4 = param4
class Child(Parent):
def __init__(self, param1=1, param2=2, param3=3, param4=4,
child_param1='a', child_param2='b', child_param3='c'):
"""
Child implementation of parent.
:param param1: do I need this again???
:param param2: do I need this again???
:param param3: do I need this again???
:param param4: do I need this again???
:param child_param1: child parameter 1
:param child_param2: child parameter 2
:param child_param3: child parameter 3
"""
super().__init__(param1, param2, param3, param4)
self.child_param3 = child_param3
self.child_param1 = child_param1
self.child_param2 = child_param2
在不重复父文档字符串和每个单独参数的情况下实现孩子的正确方法是什么?我希望从父级继承参数描述。我也不想每次从父级继承时都重新指定默认值。我可以这样做,但这似乎不是正确的方法:
class Child(Parent):
def __init__(self, child_param1='a', child_param2='b', child_param3='c', **parent_args):
super(**parent_args)
# rest of the code goes here...
解决方案
您不能从父级继承默认值,但您可以拥有一个“特殊(唯一)”默认值,然后使用它来设置“真实”默认值。例如
DEFAULT = object()
class Vehicle:
DEFAULT_WHEELS = 4
def __init__(self, wheels=DEFAULT):
if wheels is DEFAULT:
wheels = self.DEFAULT_WHEELS
self.wheels = wheels
class Car(Vehicle):
DEFAULT_COLOUR = "Red"
def __init__(self, colour=DEFAULT, **kwargs):
super().__init__(**kwargs)
if colour is DEFAULT:
colour = self.DEFAULT_COLOUR
self.colour = colour
# You can also use the class-level default to modify the
# defaults without having to re-write the init:
class Tricycle(Vehicle):
DEFAULT_WHEELS = 3
推荐阅读
- blender - 在单个网格处为两个段应用两种材料
- python - 无法在 spaCY 中将 ORTH 转换为字符串
- hbase - HBase 区域无法拆分
- reactjs - Material-UI : Rating Component,根据值改变颜色
- javascript - PayPal JavaScript 集成 - 打开新选项卡
- java - 在 java 类中使用启用 JNI 的 Lib
- pytorch - 从 Pytorch 张量中排除索引
- salesforce - APIQuickAction 提交后刷新页面
- javascript - 如何创建多个切换按钮?
- android - com.test.test.LibraryBook 类未定义无参数构造函数