Python:如何为MutableSequence派生类定义-uunew_uu?

2024-03-29 10:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想继承集合.MutableSequence公司名称:

class myList(MutableSequence):
   def __new__(cls,*kwargs):
      obj=MutableSequence.__new__(cls,*kwargs)
      return obj

我得到了一个错误:

^{pr2}$

当我以同样的方式直接从内置的list类派生类时,没有出现任何错误:

class myList(list):
   def __new__(cls,*kwargs):
      obj=list.__new__(cls,*kwargs)
      return obj

我曾试图寻找为myList(MutableSequence)定义构造函数的方法,但没想到:


Tags: 名称objnewreturndef错误方式公司
2条回答

不能实例化抽象类;可以实例化非抽象类。回答了你的问题。在

没有答案的问题是:为什么首先要定义__new__?在

抽象基类是一个协定。这是一个由它派生的类必须遵守的一系列承诺。在

collections类的每个承诺都列在the docs中。例如,从MutableSequence继承的任何内容都将具有__getitem____setitem____delitem__等。在

不能实例化合同!在


当您创建从抽象基类继承的类时,您不会继承这些方法。(嗯。。。你继承了一堆“抽象方法”,它们只是占位符。为了实现从ABC继承而做出的承诺,您必须给出这些方法的定义。他们可以做任何你喜欢的事,但他们必须在那里。在

实际上,您继承的方法可以是真正的方法,您可以使用super()将其委托给它们。这允许您指定默认行为。但这并不常用。

相关问题 更多 >