读书人

Python中属性回调实现有关问题(急的冒

发布时间: 2012-04-05 12:42:40 作者: rapoo

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

读书人网 >perl python

热点推荐