gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:44:57 27 4
gpt4 key购买 nike

我正在尝试从 collections.MutableSequence 继承:

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

我收到错误:

>>>a=myList()
>>>TypeError: Can't instantiate abstract class ContactMapList with abstract methods __delitem__, __getitem__, __len__, __setitem__, insert

当我以相同的方式直接从内置列表类派生我的类时,没有收到任何错误:

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

我尝试寻找为 myList(MutableSequence) 定义构造函数的方法,但运气不佳:(

最佳答案

抽象基类是一个契约。这是任何从它派生的类都必须遵守的 promise 列表。

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

您无法实例化契约(Contract)!

<小时/>

当您创建一个从抽象基类继承的类时,您不会继承这些方法。 (好吧......请参阅下面的注释。)您继承了一堆“抽象方法”,它们只是占位符。为了履行您通过继承 ABC 所做的 promise ,您必须为这些方法给出定义。他们可以做任何你想做的事,但他们必须在那里。

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

关于Python:如何为 MutableSequence 派生类定义 __new__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com