我想继承集合.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)定义构造函数的方法,但没想到:
不能实例化抽象类;可以实例化非抽象类。回答了你的问题。在
没有答案的问题是:为什么首先要定义
__new__
?在抽象基类是一个协定。这是一个由它派生的类必须遵守的一系列承诺。在
collections
类的每个承诺都列在the docs中。例如,从MutableSequence
继承的任何内容都将具有__getitem__
、__setitem__
、__delitem__
等。在不能实例化合同!在
当您创建从抽象基类继承的类时,您不会继承这些方法。(嗯。。。你继承了一堆“抽象方法”,它们只是占位符。为了实现从ABC继承而做出的承诺,您必须给出这些方法的定义。他们可以做任何你喜欢的事,但他们必须在那里。在
实际上,您继承的方法可以是真正的方法,您可以使用
super()
将其委托给它们。这允许您指定默认行为。但这并不常用。相关问题 更多 >
编程相关推荐