で始まるメソッドと終わるメソッド以外の、特定のクラスのすべてのメソッドに同じデコレータを適用したいと考えています__
。
クラスデコレータを使用して実行できるはずです。注意すべき落とし穴はありますか?
理想的には、次のこともできるようになりたいです。
- 一部のメソッドでは、特別なデコレータでマークすることにより、このメカニズムを無効にします
- サブクラスに対してもこのメカニズムを有効にします
- 実行時にこのクラスに追加されるメソッドに対しても、このメカニズムを有効にします
[注: 私は Python 3.2 を使用しているので、最近追加された機能に依存していれば問題ありません。]
これが私の試みです:
_methods_to_skip = {}
def apply(decorator):
def apply_decorator(cls):
for method_name, method in get_all_instance_methods(cls):
if (cls, method) in _methods_to_skip:
continue
if method_name[:2] == `__` and method_name[-2:] == `__`:
continue
cls.method_name = decorator(method)
return apply_decorator
def dont_decorate(method):
_methods_to_skip.add((get_class_from_method(method), method))
return method
ここに私が問題を抱えているものがあります:
get_all_instance_methods
関数の実装方法- 私の
cls.method_name = decorator(method)
行が正しいかどうかわからない - 実行時にクラスに追加されたメソッドに同じことを行う方法
- これをサブクラスに適用する方法
- 実装方法
get_class_from_method