2004年09月27日 星期一 11:24
最近在改造NewEdit,主要是实现新的Blog处理和新增的一些xmlrpc功能的界面,遇以一个问题就是:因为NewEdit的框架是以编辑器为基础的,因此许多的菜单功能是直接调用编辑器的方法。但是现在已经增加了Html view和blog page的编辑页,因此有些菜单功能不能直接支持,这样如果执行某些在原编辑器上可以执行的菜单功能,在新的编辑页上会报错。由于所有的编辑页都是从DocumentBase类继承来的,因此只要提供相应的空函数就可以解决问题。现在我想简化这样的处理,因此想使用__getattr__来实现。当某个方法或属性不存在时,返回一个空对象。但又出现另外一个问题,尽管我返回一个空对象,但hasattr()的返回结果总是True.代码如下: #__getattr__的处理 def __getattr__(self, name): return NULL_CLASS() #这是空对象 class NULL_CLASS: def __call__(self, *argv, **kwargs): return None def __nonzero__(self): return False def __str__(self): return '' def __eq__(self, other): if not other: return True else: return False def __ne__(self, other): if other: return True else: return False 如果把__getattr__的处理return 改为raise AttributeError,这样,hasattr()在不存在一个属性时,会判断为假。 现在我的问题是,有没有简单的方法可以让__getattr__返回一个空类,但同时让hasattr()返回False。 当然我可以对hasattr()多加处理以解决返回不为空的问题。只是想看一看有没有更方便的用法。不然,我要修改每个hasattr()的调用--不一定很多,只是针对所有DocumentBase的派生类,可能就几个。看看有没有什么好方法。 -- I like python!
Zeuux © 2025
京ICP备05028076号