gpt4 book ai didi

python - python内置列表的__init__方法下面的初始化过程是什么

转载 作者:行者123 更新时间:2023-11-28 22:26:57 25 4
gpt4 key购买 nike

我的问题是列表类的init 方法是否会调用其他方法(例如append 或insert)来实现其功能。

喜欢:

class test(list):

def __init__(self,values):
super().__init__()

def append(self, value):
self.append(value + 1)

我要:

x = test([1,2,3])
x
[2,3,4]

但是我得到了:

[1,2,3]

我知道我可以通过重载 init 本身来让它工作。

def __init__(self,values):
super().__init__([x+1 for x in values])

我能不能只重载一些基本的值插入方法,比如 setitem,这样所有的插入操作,比如 append、insert 都会调用它,从而产生加法效果。

感谢任何建议。

最佳答案

list.__init__ 不调用任何可覆盖的方法。它使一个 direct, un-overrideable call到实现 extend 方法的 C 函数:

if (arg != NULL) {
PyObject *rv = listextend(self, arg);
if (rv == NULL)
return -1;
Py_DECREF(rv);
}

用 C 实现的大多数 Python 类型的大多数方法都是这种情况。

关于python - python内置列表的__init__方法下面的初始化过程是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418393/

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