未绑定的描述符是否可能?

时间:2015-03-28 20:28:11

标签: python properties descriptor

(如果没有,是否有办法可以完成类似的事情?)

例如,这是一个“绑定”描述符的例子:

class VerboseDescriptor(object):
    def __init__(self, init):
        self.val = init

    def __get__(self, obj, typ=None):
        print("[%s] Get is %s" % (obj, self.val))
        return self.val

    def __set__(self, obj, val):
        print("[%s] Set to %s" % (obj, val))
        self.val = val


class Holder(object):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "Holder(%s)" % self.name

    val = VerboseDescriptor(2)


foo = Holder("foo")
_ = foo.val
foo.val = 4

输出(如预期):

[Holder(foo)] Get is 2
[Holder(foo)] Set to 4

当然,可以使用属性进行类似的操作。

但是,在示例中,VerboseDescriptor实例必须是类或实例的属性(在本例中为类Holder)。

换句话说,以下有效:

class VerboseDescriptor(object):
    def __init__(self, init):
        self.val = init

    def __get__(self, obj, typ=None):
        print("[%s] Get is %s" % (obj, self.val))
        return self.val

    def __set__(self, obj, val):
        print("[%s] Set to %s" % (obj, val))
        self.val = val


val = VerboseDescriptor(2)

_ = val
val = 4

不会调用__get____set__方法。在第一行中,_设置为引用与VerboseDescriptor相同的val实例,而在第二行中,val 已更改以引用4。

所以我的问题是,有没有办法构建一个对象,以便你能够“捕获”它的赋值,就像描述符允许你从类/实例属性中捕获赋值一样?

这个问题更具理论性而非实际性。我知道有很多类似的方法涉及类(类似于我的Holder类)就足够了。我只是想知道在没有Holder类型类的情况下是否可以实现这一功能。

读:

0 个答案:

没有答案