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

NI6*_*NI6 6 python inheritance

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

class MyObj(csv.Dictwriter):
    ...
Run Code Online (Sandbox Code Playgroud)

但这种类型是旧式的对象.可以MyObj是一个新式的类但仍然继承csv.DictWriter?

Dan*_*iel 3

是的,你也只需要继承object:

class MyObj(object, csv.DictWriter):
    def __init__(self, f, *args, **kw):
        csv.DictWriter.__init__(self, f, *args, **kw)
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这与 /sf/answers/806971161/ 建议的顺序相反,因为你的方式使“object”的方法覆盖“csv.Dictwriter”的方法。使用新样式类的关键在于_不_显式调用特定父类的方法,而是能够使用“super()”,不是吗? (2认同)
  • @Daniel这实际上是我认为_错误_继承的一个很好的例子。只要不使用多重继承,我们就在这里吹毛求疵,但是假设我们子类化了 `class GrandChild(MyObj, AnotherCSVThing)` ,您要么必须显式调用 _both_ 父母的构造函数,要么让 `super` 处理它,其中case `MyObj` _not_ 使用 `super` 会破坏整个 MRO 机制...所以 TL;DR 你的答案不是不正确,但它_可能_导致将来难以调试的行为... (2认同)