在Python 3中覆盖时设置默认kwargs

时间:2018-05-22 17:33:56

标签: python python-3.x kwargs

我有一个Python类,我想用kwargs实例化:例如。

a = ClassA(happy=True)

我想用ClassB覆盖这个类并将happy设置为True,我认为这个定义可行:

class ClassB(ClassA(happy=True))

但是我得到了:

TypeError: 'ClassA' object is not callable

我目前的解决方法是将ClassB定义为:

class ClassB(ClassA)

但是每次我实例化ClassB时,我都必须这样做:

b = ClassB(happy=True)

任何人都知道怎么做?

1 个答案:

答案 0 :(得分:1)

这是怎么做的:

class ClassB(ClassA):
    def __init__(self, happy=True):
        super().__init__(happy=happy)

在定义类的基类时,就是这么做 - 定义基类(这里:(ClassA))。

当您想要创建类的实例(例如ClassB())时,会发生什么?它的构造函数(__init__)被调用。

基类显然有一个构造函数,它以False作为默认值,因此您重写构造函数并更改其默认参数值。

然后,使用任何值(super().__init__(happy=happy))调用基础构造函数。