gpt4 book ai didi

python - 如何使用重定义一个方法,在方法中仍然使用原来未修改的继承方法?

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:31 25 4
gpt4 key购买 nike

这个问题措辞不佳,但我想不出更好的表达方式。这也可能是一个简单的问题,但很难正确描述以搜索它。为了记录,我正在用 Python 编码。

我正在尝试创建一个继承列表类型的新类。它实际上应该是我定义的另一个类的列表,其中该类的一个变量是一个 int。对列表进行排序后,我希望它根据这些整数进行排序。当我在类上重新定义排序时,无论我如何使用列表类型中的原始排序。

最佳答案

如果您只是问“如何从我的 sort 方法调用父类(super class)的 sort 方法,可以使用 super 完成。

例如,如果你只想让 sort 中的 key 在 Python 2.7 中默认为 int:

class MyList(list):
def sort(self, cmp=None, key=None, reverse=None):
if cmp is None and key is None:
key = int
return super(MyList, self).sort(cmp, key, reverse)

在 3.3 中,使用魔法 super 甚至更简单(而且,sort 没有 cmp 参数):

class MyList(list):
def sort(self, key=None, reverse=None):
if key is None:
key = int
return super().sort(key, reverse)

如果你问如何在调用旧方法的方法中进行 monkeypatch,那有点棘手……但关键是函数和方法是一流的值,所以你可以将它们保存在变量、属性等中.

在 2.7 中:

old_sort = MyList.sort
def new_sort(self, cmp=None, key=None, reverse=None):
if cmp is None and key is None:
key = int
return old_sort(self, cmp, key, reverse)
MyList.sort = types.UnboundMethodType(new_sort, None, MyList)

同样,3.3 更简单,这次是因为未绑定(bind)方法与函数相同:

old_sort = MyList.sort
def new_sort(self, key=None, reverse=None):
if key is None:
key = int
return old_sort(self, key, reverse)
MyList.sort = new_sort

关于python - 如何使用重定义一个方法,在方法中仍然使用原来未修改的继承方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938782/

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