python - 子类覆盖父参数
问题描述
情况:我有一个函数,我想要一个只有一个不同默认参数的孩子。是否可以不重写每个参数而只重写我想要更改的参数?
class Weapon():
def __init__(self, weight=12, ammo=22, name="shotgun",useful=True, broken=False, needed_lvl=5, range=2, price=233):
pass # A LOT OF STUFF NOT INTERESTING FOR THIS EXAMPLE
有效的答案但效率不高:无用的重复信息,如果父项中的一件事发生变化,很容易被打破。
class ShotGun(Weapon):
def __init__(self, weight=12, ammo=12, name="shotgun",useful=True, broken=False, needed_lvl=5, range=2, price=233):
pass # A LOT OF STUFF NOT INTERESTING FOR THIS EXAMPLE
通缉答案:如果用户不更改任何内容,则参数的默认值ammo
应为12
.
class ShotGun(Weapon):
def __init__(self, **kwargs):
super().__init__(**kwargs)
pass # A LOT OF STUFF NOT INTERESTING FOR THIS EXAMPLE
解决方案
您只能覆盖特定参数。只需将其他所有内容传递给super().__init__()
. 但是您仍然需要在子类中设置 overriden 属性才能使新的默认值生效:
class Weapon():
def __init__(self, weight=12, ammo=22, name="shotgun",useful=True, broken=False, needed_lvl=5, range=2, price=233):
self.ammo = ammo
self.name = "shotgun"
class ShotGun(Weapon):
def __init__(self, ammo=12, **kwargs): # override only ammo
super().__init__(**kwargs)
self.ammo = ammo # use overriden value instead of parent
s = ShotGun()
print(s.ammo)
print(s.name)
输出:
12
shotgun
推荐阅读
- .htaccess - MVC htaccess 块 javascript
- mongodb - 在我的电子商务网站上保留购物车项目
- reactjs - 循环通过 JSX.Elements 的 [] 并向其中动态添加类
- c++ - GCC C++14/17 成员函数指针模板参数的区别
- c# - 通过控制器注入时,作用域生命周期服务变为单例
- postgresql - 错误:“文本”位置或附近的语法错误:314
- c# - DirectX (SharpDX) 线框错误
- spring-boot - Spring/Java Mail:发件人始终是 spring.mail.username。FROM 地址被忽略
- javascript - 填补空档
- python - 按组将值替换为python中两个先前值的总和