首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

2012-04-05 
Python中属性回调实现问题(急的冒汗阿)例如:defonchange_attrib(new_value):printonchange_attrib class

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

热点排行