Python装饰器来模仿jQuery getter和

2024-10-01 04:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法知道一个方法所属的类。在下面的代码中,我想构建一个decorator,如果函数f没有参数或没有参数,它可以调用名为get_f_nameset_f_name的方法。其思想是模仿jQuery的getter setter语法构建一个装饰器。你知道吗

为此,我必须知道函数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"
        )

Tags: 方法key函数nameselfnonedata参数
1条回答
网友
1楼 · 发布于 2024-10-01 04:52:46

jqueryize运行时,Test类不存在,data只是一个普通函数。一种方法是使用两个decorator—一个用于方法,通过在函数上设置一个属性来标记要jqueryized的方法,然后一个类decorator查找类中所有标记的方法并执行实际的转换。使这项工作的原因是类装饰器在类创建之后执行。你知道吗

使用元类也可以获得相同的结果。这一点更容易实现,但是您可以避免修饰每个具有修饰方法的类,只要它们子类化了完成繁重工作的元类的实例。你知道吗

相关问题 更多 >