sort
「自分のメソッドから自分のスーパークラスのメソッドを呼び出すにはどうすればよいか」と尋ねているだけなら、それはsupersort
を使用して行われます。
たとえば、Python 2.7 でkey
in をsort
デフォルトにしたいだけの場合: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)
古いメソッドを呼び出すメソッドにモンキーパッチを適用する方法を尋ねている場合、それは少しトリッキーです...しかし重要なのは、関数とメソッドはファーストクラスの値であるため、それらを変数、属性などに保存できるということです.
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