有没有办法知道一个方法所属的类。在下面的代码中,我想构建一个装饰器,如果函数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"
)
答案 0 :(得分:0)
在jqueryize
运行时,Test
类不存在,data
只是一个正常的函数。实现你想要的一种方法是使用两个装饰器 - 一个用于方法,它只是通过在函数上设置属性来标记要被jqueryized的方法,然后是一个类装饰器,它找到类中的所有标记方法,实际的转变。使这项工作的事实是类装饰器在创建类之后执行。
使用元类也可以获得相同的结果。这实现起来更加繁琐,但是你可以避免必须装饰每个具有装饰方法的类,只要它们子类化了重组的元类实例。