(如果没有,是否有一种方法可以完成类似的事情?)你知道吗
例如,下面是一个“绑定”描述符的示例:
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__
方法。在第一行中,_
被设置为引用与val
相同的VerboseDescriptor
实例,在第二行中,val
被更改为引用4。你知道吗
所以我的问题是,有没有一种方法可以构建一个对象,这样您就可以“捕捉”到它的赋值,就像描述符允许您捕捉到类/实例属性的赋值一样?你知道吗
这个问题更多的是理论问题,而不是实际问题。我知道有一些非常相似的方法涉及到类(类似于我的Holder
类),这就足够了。我只是想知道,如果没有Holder
类型的类,这个功能是否可行。你知道吗
阅读:
目前没有回答
相关问题 更多 >
编程相关推荐