Python中属性回调实现问题(急的冒汗阿)
例如:
def onchange_attrib(new_value):
print "onchange_attrib "
class obj:
attrib = 0
def__init__():
pass
test = obj()
test.attrib = 10
我希望在运行test.attrib = 10之后,能自动调用onchange_attrib函数,也就是要绑定attrib和onchange_attrib,不知道各位大牛们有没有什么办法?小弟感激涕零
[解决办法]
你可以这样做
def onchange_attrib(new_value):
print "onchange_attrib "
class obj:
attrib = 0
def__init__(self):
pass
def setAttrib(self, value):
self.attrib = value
onchange_attrib(value)
test = obj()
test.setAttrib(10)
[解决办法]
你可以这样做
def onchange_attrib(new_value):
print "onchange_attrib "
class obj:
_attrib = 0
def__init__(self):
pass
@property
def attrib(self, value):
self._attrib = value
onchange_attrib(value)
test = obj()
test.attrib = 10
[解决办法]
其实最简单的方法是做个经理,找别人给你写代码。
[解决办法]
晕~没太明白LZ什么意思。
LZ就在自己定义的类obj的def__init__()去调用onchange_attrib()不就行了? 虽然_init_()不同于构造函数,但基本功能差不多啊。
另外,动态语言不同于C#之类的语言,不存在早期绑定和晚期绑定之说,需要用时随时调用,想怎么调用就可以怎么调用。
[解决办法]
lz的意思是不是要在属性赋值的时候加一个钩子?
#!/usr/bin/env python
def onchange_attrib(new_value):
__print "onchange_attrib "
class ObjCls:
__def __setattr__(self, name, value):
____self.__dict__[name] = value
____if name == 'attrib ':
______onchange_attrib(value)
test = ObjCls()
test.attrib = 10
print test.attrib