如何扩展Python类init

MFB*_*MFB 29 python inheritance initialization class

我创建了一个基类:

class Thing():
    def __init__(self, name):
        self.name = name
Run Code Online (Sandbox Code Playgroud)

我想扩展类并添加到init方法,以便它SubThing具有a nametime属性.我该怎么做?

class SubThing(Thing):
    # something here to extend the init and add a "time" property

    def __repr__(self):
        return '<%s %s>' % (self.name, self.time)
Run Code Online (Sandbox Code Playgroud)

任何帮助都是极好的.

Jes*_*sse 38

您可以__init__在子类中定义并调用super__init__适当地调用父类的方法:

class SubThing(Thing):
    def __init__(self, *args, **kwargs):
        super(SubThing, self).__init__(*args, **kwargs)
        self.time = datetime.now()
Run Code Online (Sandbox Code Playgroud)

确保具有基类子类,objectsuper不适用于旧式类:

class Thing(object):
    ...
Run Code Online (Sandbox Code Playgroud)

  • 而不是在`super`中引用`SubThing`,你可以做`super(self .__ class__,self).__ init __(*args,**kwargs)`.这也适用于使用`type()`动态创建的类. (17认同)
  • 我用这两个解决方案得到这个错误:`TypeError:必须是type,而不是classobj` - 错误是由我的超级线路触发的. (3认同)