这个问题的措辞很差,但我想不出更好的方法。这也可能是一个简单的问题,但很难正确描述搜索它。我正在用python编写记录。
我正在尝试创建一个继承列表类型的新类。它应该有效地是我定义的另一个类的列表,其中该类的一个变量是int。列表排序后,我希望它根据这些int进行排序。当我在课堂上重新定义排序时,我如何使用列表类型中的原始排序。
答案 0 :(得分:1)
如果您只是问“我如何使用sort
方法调用我的超类sort
方法,则使用super完成。
例如,如果您只想将key
中的sort
默认为{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
更简单(并且cmp
没有sort
参数):
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更简单,这次是因为未绑定的方法与函数相同:
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
答案 1 :(得分:0)
如果您确切知道父类具有您要调用的重写方法(我假设在这种情况下分别是list
和sort
),您可以在子类中调用父类的方法,如下所示:
def sort(self, ...):
...
list.sort(self, ...)
...