0

有没有办法知道一个方法所属的类。在下面的代码中,我想构建一个装饰器,它可以调用命名的方法get_f_name或者 set_f_name函数f是否没有参数。这个想法是构建一个模仿 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"
        )
4

1 回答 1

0

jqueryize运行时,Test该类不存在,data只是一个普通函数。做你想做的事情的一种方法是使用两个装饰器 - 一个用于方法,它只是通过在函数上设置一个属性来标记要被 jqueryized 的方法,然后是一个类装饰器,它在类中找到所有标记的方法和进行实际的转换。使这项工作起作用的是类装饰器在创建类之后执行的事实。

您也可以使用元类获得相同的结果。这实现起来更加繁琐,但是您可以避免必须装饰每个具有装饰方法的类,只要它们将执行繁重工作的元类的实例子类化即可。

于 2013-03-16T13:29:46.500 回答