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
,在这种情况下,对象
的更通用的