我可以在子类方法中更改父类方法的默认行为吗?

2024-10-03 09:15:14 发布

您现在位置: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'])

如果可以这样做,还有其他方法吗

谢谢


Tags: 方法nameselfchildreturnifinitdef
1条回答
网友
1楼 · 发布于 2024-10-03 09:15:14

您可以使用^{}

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

相关问题 更多 >