Python继承了旧样式类中的旧样式类型

Python inheritance old style type in a new style class

我使用的是csv.DictWriter类,我想继承它:

1
2
class MyObj(csv.Dictwriter):
    ...

但是这个类型是一个旧样式的对象。MyObj是否可以是一个新的风格的阶级,但仍然可以从csv.DictWriter继承?


是的,你只需要继承object

1
2
3
class MyObj(object, csv.DictWriter):
    def __init__(self, f, *args, **kw):
        csv.DictWriter.__init__(self, f, *args, **kw)


正如丹尼尔所说的,你需要混合object。但是,使用新样式类的一个主要点也是使用super,因此应该使用

1
2
3
4
class MyObj(csv.DictWriter, object):
    def __init__(self, csvfile, mycustomargs, *args, **kwargs):
        super(MyOobj, self).__init__(csvfile, *args, **kwargs)
        ...

如其他地方所述,object应该是最后一个父级,否则object的默认方法(如__str____repr__)将覆盖另一个父级的实现,这肯定不是您想要的……