通常的描述符用在类属性,像这样:Python的描述符(__get__,__set__)上功能参数
class Owner(object):
attr = Attr()
当越来越Owner.attr
,Attr.__get__(self, instance, owner)
被称为其中self = Owner.attr
,instance = None
和owner = Owner
。
当Owner
被实例化时instance
将是Owner
的实例。
现在我想将这个概念应用于方法参数而不是类属性。
会如何看待在实践中(我们假设的Attr
功能是包装一个字符串给定的字符串):
class Example(object):
def funct(self, param=Attr('t')):
return param == 'test' # < param calls the descriptor here
e = Example()
e.funct('es') # < is True because 'es' wrapped with 't' becomes 'test'.
当访问param
,Attr.__get__(self, instance, owner)
将与self = funct.param
,instance = funct
和owner = funct
被称为(尽管owner
和instance
是一样的,可能是None
?)。 但由于funct
不是一个类,所以这不起作用。我如何得到类似于工作的东西?
该函数的装饰器将处理参数,所以这可能会增加我认为的解决方案。 装饰者必须是,例如,能够改变包装字符串。
你可以添加一个使用场景来显示如何访问'param'? – unutbu 2013-04-30 13:07:13
这个功能的目的是什么?你是否试图将状态附加到函数中?你是否试图通过参数动态定义函数的行为?你是否试图推迟一些依赖的解析,直到函数被执行? – 2013-04-30 13:22:27
@unutbu我已经添加了一个用例,我认为更适合。你觉得现在更清楚了吗? – siebz0r 2013-04-30 13:31:23