0

1つのメソッドが属するクラスを知る方法はありますか?次のコードでは、指定されたメソッドを呼び出すか、関数に引数がないget_f_nameか どうかを呼び出すことができる1つのデコレータを作成します。アイデアは、jQueryのゲッターセッター構文​​を模倣する1つのデコレーターを構築することです。set_f_namef

そのためには、関数fがどのクラスから来るのかを知る必要があります。

def jqueryize(f):
#    ????

class Test():
    def __init__(self):
        self.string      = "A little text..."
        self.dictionnary = {
            'key_1': 12345,
            'key_2': [1, 2, 3, 4, 5]
        }
        self.boolean = True

    @jqueryize
    def data(
        self,
        string      = None,
        dictionnary = None,
        boolean     = None
    ):
        ...

    def set_data(
        self,
        string,
        dictionnary,
        boolean
    ):
        ...

    def get_data(self):
        print(
            self.string,
            self.dictionnary,
            self.boolean,
            sep = "\n"
        )
4

1 に答える 1

0

実行時jqueryizeには、Testクラスは存在せずdata、通常の関数です。必要なことを行う1つの方法は、2つのデコレーターを使用することです.1つはメソッド用で、関数に属性を設定してjquery化するメソッドをマークするだけで、次にクラス内のマークされたすべてのメソッドを見つけてクラスデコレーターと実際の変換を行います。これを機能させるのは、クラスの作成後にクラス デコレータが実行されるという事実です。

メタクラスを使用して同じ結果を達成することもできます。これは実装が面倒ですが、面倒な作業を行うメタクラスのインスタンスをサブクラス化する限り、装飾されたメソッドを持つすべてのクラスを装飾する必要はありません。

于 2013-03-16T13:29:46.500 に答える