15

Attribute Error存在するかどうかに関係なく、メソッドの呼び出しを行わないクラスを作成したいと思います。

私のクラス:

class magic_class:
    ...
    # How to over-ride method calls
    ...

期待される出力:

ob = magic_class()
ob.unknown_method()
# Prints 'unknown_method' was called

ob.unknown_method2()
# Prints 'unknown_method2' was called

現在、unknown_methodandunknown_method2は実際にはクラスに存在しませんが、 python でメソッド呼び出しを傍受するにはどうすればよいでしょうか?

4

3 に答える 3

34

__getattr__()魔法の方法を上書きします。

class MagicClass(object):
    def __getattr__(self, name):
        def wrapper(*args, **kwargs):
            print "'%s' was called" % name
        return wrapper

ob = MagicClass()
ob.unknown_method()
ob.unknown_method2()

プリント

'unknown_method' was called
'unknown_method2' was called
于 2012-06-04T10:31:23.157 に答える
1

オーバーライド__getattr__; http://docs.python.org/reference/datamodel.htmlを参照してください

于 2012-06-04T10:29:37.830 に答える