python - 我可以在子类方法中更改父类方法的默认行为吗?
问题描述
我正在学习简单的python继承,我希望我的父类方法默认参数之一有条件地更改为我的子类参数值之一,我不知道这是否可能。
这是我想做的一个例子:
class Parent(object):
def __init__(self, name):
self.name = name
def doSomething(self, name, strict = True):
if strict:
return self.name
else:
return name
class Child(Parent):
def __init__(self, name, **kwargs):
super(Child, self).__init__(name)
if 'changeBehavior' in kwargs:
# Here is the thing:
# Can I change the default value of strict to kwargs['changeBehavior']
# in a way that when I later call doSomething(), it will behave according
# to its new default behavior?
def doSomething(self, name, strict = kwargs['changeBehavior']):
super(Child, self).doSomething(strict = kwargs['changeBehavior'])
如果可以通过这种方式完成,还有其他方法吗?
谢谢
解决方案
您可以使用partial
.
from functools import partial
class Parent(object):
def __init__(self, name):
self.name = name
def doSomething(self, name, strict=True):
print('Got strict={}'.format(strict))
if strict:
return self.name
else:
return name
class Child(Parent):
def __init__(self, name, **kwargs):
super().__init__(name)
change_behavior = kwargs.get('changeBehavior')
if change_behavior is not None:
self.doSomething = partial(self.doSomething, strict=change_behavior)
p = Parent('name')
c = Child('name', changeBehavior=False)
p.doSomething('name')
c.doSomething('name')
输出
Got strict=True
Got strict=False
推荐阅读
- android - 如果号码格式不同,如何匹配用户联系人列表中的电话号码?
- reactjs - 环形图中的 React-Chart-JS2 标签
- ruby-on-rails - libffi.so.6:无法在 rails 中打开共享对象文件
- angular - 从角度表单数组中获取选定的单选按钮值
- c# - 通过 ASP .NET 为客户的 PC 加入域
- c++ - 使用宏重新定义 noinline 属性
- cuda - 在 cuda 内核函数上实现互斥锁恰好死锁
- angular - 如何处理 ionic 3 中的 http 错误响应?
- python - 应用程序内部的异常:您不能从异步上下文中调用它 - 使用线程或 sync_to_async
- forms - Flutter 表单同时显示所有字段的错误。如何让它显示一个字段的验证消息?