python编程的一小点方法论

python支持动态数据结构,因此无论什么对象都可以赋值给任意变量,动态数组list中也可以存放不同类型的对象。在实际工作中,经常会遇到一组不同类型的对象(比如一个整形代表标识、一个字符串代表描述、还有一个字典存储数据等等),其物理意义是描述同一个逻辑实体,类比到Cpp或Java就是一个类的各个属性。但是在python中缺不是必须要为这个逻辑实体来定义一个类,可以将这一组不同类型的对象依次放进一个list,来隐式代表一个“类对象”。通常这样的“类对象”又被放进一个更大的list或者放进dict。

在实际中经常自然而然地这么做,特别是当这个逻辑实体的属性集未完全确定时,list很方便随时增加属性。若是一个不必长期维护的脚本,或这临时完成一次性的小工作,这样做也没有大问题。若这个代码还要长期维护且可能会修改(不论是自己维护,还是交给别人),这样做都会令人非常困惑。虽然python代码的可读性比较高,但是这种隐式的作风,仍会让人不知道到list中的第几个元素是什么类型,即使是自己写的代码,过几天读起来也会很费劲。如果这种隐式的“类对象”又作为函数的返回值,那调用方就更困惑了,稍有粗心代码就可能会抛出ValueError异常,通常要花一定时间去调试,看看这个返回值到底是如何生成的,每个元素的意义和类型是什么。这种调试很浪费精力。

所以,个人感觉即使是python这种非常灵活的语言,仍然非常有必要用class来显示地定义逻辑实体。如果作为函数返回值,调用方也能了解逻辑实体的定义。也许在使用动态类型语言时,程序风格更重要。

 

posted @ 2012-09-13 11:38  苦力笨笨  阅读(243)  评论(0编辑  收藏  举报