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

Python继承新样式类中的旧样式类型,python,inheritance,Python,Inheritance,我正在使用csv.DictWriter类,我想继承它: class MyObj(csv.Dictwriter): ... 但此类型是一个旧式对象。MyObj是否可以是一个新样式的类,但仍然可以从csv.DictWriter继承?是的,您也只需要从对象继承: class MyObj(object, csv.DictWriter): def __init__(self, f, *args, **kw): csv.DictWriter.__init__(self, f

我正在使用
csv.DictWriter
类,我想继承它:

class MyObj(csv.Dictwriter):
    ...

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

是的,您也只需要从
对象继承:

class MyObj(object, csv.DictWriter):
    def __init__(self, f, *args, **kw):
        csv.DictWriter.__init__(self, f, *args, **kw)
正确地说,您需要混合
对象
。但是,使用新样式类的一个要点是使用
super
,因此您应该使用

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

如前所述,
object
应该是最后一个父对象,否则
object
的默认方法,如
\uuuu str\uuuu
\uu repr\uuu
将覆盖另一个父对象的实现,这肯定不是您想要的…

类MyObj(csv.DictWriter,object)
?参见例如,然后看_uuuinit_uuuuuuuuuuo方法的外观如何?@NI6:与任何普通类一样,请参见answer.Hm,这是建议的相反顺序,因为您的方式使
对象的方法覆盖
csv.Dictwriter
的方法。使用NeXType类的要点不是明确地调用一个特定的父类的方法,而是能够使用<代码> Suffor()/代码>,不是吗?“丹尼尔,这实际上是我认为错误继承的一个好例子。只要不使用多重继承,我们就在这里分门别类,但是假设我们将
类孙子(MyObj,另一个csvthing)
分为子类,您要么显式调用两个父类的构造函数,要么让
super
处理它,在这种情况下
MyObj
不使用
super
将破坏整个MRO机制。。。So TL;DR您的回答没有错误,但这可能会导致将来调试行为的困难……是的,
DictWriter
不与
对象
共享任何方法,但一般来说,即使是旧样式的类也可能实现,例如
\uu str\uuu
,在这种情况下,
对象
的更通用的