【发布时间】:2016-07-28 15:33:37
【问题描述】:
获取描述符时是否可以传递额外的参数?
例如,我想要:
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 设置为必需参数,但找不到任何实际提供它的方法?
如果不使用描述符,是否有替代方法来实现此语法?
谢谢!
【问题讨论】:
-
好吧,如果您将其稍微更改为
self.elem1()和self.elem1(extra_text='extra'),您基本上已经重新发明了一种方法。 AFAIK 这可能是可能的,但我永远不会那样做。 -
你绝对不能那样做,因为描述符只有在作为属性访问时才有效(比如
self.elem1,而不是普通的elem1)。您可以做的是使描述符的__get__返回一个可调用对象,该对象接受您想要的任何参数。但是你想做什么用普通方法做不到的呢? -
@BrenBarn 我的错,我的意思是
self!我试图做的主要事情是在描述符类中获取实例,而不必通过参数传递它。 -
@Bakuriu:我对
self.elem1()语法没问题,但我试图避免使用描述符每次都必须传递self而不仅仅是能够使用instance.
标签: python python-2.7 python-descriptors