[件人悟语]细节不是魔鬼

不要纠缠隐藏细节,除非隐藏细节已经造成了你的程序错误;
但是由于隐藏细节而造成了问题,多半是你程序的设计问题!
  • Python 中,没有隐藏的陷井(应该是,陷井少到一般人非常非常难以触发)!

所以,放开心情,享受快捷吧!

回应C++ 的心理需求

卢熙 <[email protected]>
reply-to        [email protected]
to      [email protected]
date    Sun, Sep 28, 2008 at 10:35
subject [CPyUG:66894] Re: 那位老大写个python调试的分享啊?


2008/9/28 Zoom. Quiet <[email protected]>

  • 2008/9/27 卢熙 <[email protected]>:

    • > 高手们可以不用调试,我不是高手,调试工具我对我来说还是极度重要的,尤其是像python这种动态语言,经常不知道frameworks什么时候神神秘秘的往我的对象里动态添加了些什么方法属性之类的,能够在某个地方断一下点,跟踪一下堆栈什么的,查看一下全局和局部变量,对于我们这些菜鸟来说还是很有帮助的。我用wing

    • > ide,你用eclipse能怎么玩java,wing就能怎么玩python

对比

    你在使用 J2EE 的时候关注过框架给你追加的属性?!
    Python 框架从来没有那个这么玩的卟?
    类树是由你继续和扩展的,框架的东西永远就那样儿,
    任何时候任何地点使用 dir() 就可以观察到一切对象在你当前的 namespace 中,
    你如果不相信框架,
    也完全可以自行定制出来一个,
    这也不是难事儿,
    UliWeb/Wukoo/Eruasia,,,,,都是国人自制的,,,,

    调试其实就是测试, TDD一直这么忽悠的,,,


J2EE我没用过的,但是JAVA不是的动态语言,所以在运行时是不可以随便增删对象的方法和属性的吧(不知道我的理解有没有错)

python的框架真的会给对象加属性的,django的Model就是典型的例子,例如有这么一个类

   1 class detail(models.Model):
   2     name = models.CharField(max_length=30)
   3     file_name = models.CharField(max_length=30)
   4     date = models.DateTimeField(auto_now_add=True)
   5     descript = models.TextField()
   6     tags = models.CharField(max_length = 20, blank = True, null = True)
   7     extern_info = models.ForeignKey(extern_info)
   8 
   9     def __unicode__(self):
  10         return self.name
  • 只要是对象里有外键的字段,django都会自动的给他在增加以主键属性的,上面那里例子的对象就会多了一个extern_info_id属性
  • 而且严格意义上说,这些Model对象里面的字段属性都是动态生成的,因为定义的时候都不是定义在init()里面的,定义的时候都是属于类的属性,但这些属性又是怎么变成了对象的属性的呢?

  • dir()是可以看到对象的一切属性、方法等,但是IDE断点后可以把其下面属性的值都列出来,感觉还是直观方便很多的。
  • 我不是不相信框架了,人家的东西能够存在并广泛应用,肯定是有原因的。我只是想通过一定的方式更快更深刻的去了解框架而已。自己做一个,能够符合实际需要并且够pythonic ....... 我不太相信我有这个能力。


反馈

创建 by -- ZoomQuiet [2008-09-28 03:18:28]

Name Password4deL ;) :( X-( B-)

PageCommentData


件人悟语分类