获取描述符时是否可以传递其他参数?
例如,我想:
class Element(object):
def __init__(self, text='initial'):
self.text = text
def __get__(self, instance, owner, extra_text=''):
print self.text + instance.name + extra_text
然后能够像:
一样使用它class MyClass(object):
elem1 = Element()
elem2 = Element(text='override')
def __init__(self, name):
self.name = name
def print_elems(self):
self.elem1
self.elem1(extra_text='extra')
self.elem2
self.elem2(extra_text='extra')
MyClass('name').print_elems()
然后得到:
initialname
initialnameextra
overridename
overridenameextra
有没有办法让这项工作?我甚至尝试过调用elem1.__get__(self, self.__class__, extra_text='extra)
并将extra_text
作为必需的参数,但无法找出实际提供它的方法吗?
如果没有描述符,是否有另一种方法来实现这种语法?
谢谢!
答案 0 :(得分:0)
为了使用除自动参数之外的任何内容调用 get (),您需要访问描述符的实例。要做到这一点... 第1步:将第一行添加到获取():
if instance is None:
return self
这是该方法的一个相当常见的补充。
步骤2:访问描述符时,从类而不是实例中获取它:
MyClass.elem1
MyClass.elem1
或
type(my_inst).elem1
type(my_inst).elem1
步骤3:显式调用 get (),传入所需的参数。
丑陋和冗长;尽可能避免。我有一本关于描述符的书,可以在http://www.lulu.com/spotlight/jacobz_20找到 如果你感到困惑,它可以真正帮助你解决这个问题。