帮助开发人员更快地阅读类层次结构的工

时间:2012-04-28 07:58:50

标签: python django class

我主要在日常工作中花时间在Python / Django和Objective-C / CocoaTouch和js / jQuery上。

我选择的编辑器是{/ 1}}用于Python / Django和js / jQuery,vim用于Objective-C / CocoaTouch。

我的开发速度的一个瓶颈是我读取现有代码的速度,特别是我使用的开源库。

在Python / Django中,当我遇到django开发人员引入的一些新功能时,我很好奇并开始手动探索代码库。例如,当从django 1.3开始引入基于类的视图时,引用 - https://docs.djangoproject.com/en/dev/topics/class-based-views/ - 我将查看显示的示例代码:

xcode

在我的一个项目上尝试一下。更重要的是,我对幕后发生的事情感到好奇,所以我将深入研究源代码 -

from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = "about.html"

从这里开始,我将向后追溯到django / views / generic / base.py文件,找出# django/views/generic/__init__.py file from django.views.generic.base import View, TemplateView, RedirectView from django.views.generic.dates import (ArchiveIndexView, YearArchiveView, MonthArchiveView, WeekArchiveView, DayArchiveView, TodayArchiveView, DateDetailView) from django.views.generic.detail import DetailView from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView from django.views.generic.list import ListView class GenericViewError(Exception): """A problem in a generic view.""" pass 类的确切内容: -

TemplateView

这里显示class TemplateView(TemplateResponseMixin, View): """ A view that renders a template. """ def get_context_data(self, **kwargs): return { 'params': kwargs } def get(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return self.render_to_response(context) 类继承自TemplateViewTemplateResponseMixin类......我继续深入挖掘......等等......

问题是,这是一个非常低效和缓慢的过程(手动“跟随”类层次结构并沿途打开每个文件)。

所以问题是 - 是否有一个简单的方法/ UI工具(或其他可视化解决方案)解析特定项目中的Python代码并可视化类层次结构,然后我可以通过“单击”特定类来轻松检查有兴趣阅读一下吗?

注意我知道IPython shell,但它看起来并不像用户视觉显示工具那样友好。

例如,Objective-C / iOS / Mac编程世界中有View,它不仅提供了一个shell(很像python或IPython shell),而且为开发人员提供了一种内省类的可视方式hierachies。

参考截图: -

enter image description here

那么是否有一个类层次结构可视化工具(专门用于Python,但如果它是通用的并且可以用于不同的语言,那就更好了)???在阅读开源代码时,你有什么方法可以有效地加快速度?

已更新

根据下面的建议,我尝试了F-Script和vim插件ctags,我可以使用taglist在vim中打开一个侧缓冲区,如下所示: -

enter image description here

这看起来很酷,因为:TlistOpen现在基本上显示了我当前打开的缓冲区中可用的所有类和函数。

我现在的问题是,当我的光标在:TlistOpen上时,当我尝试执行 Ctrl ] 时,我收到以下错误: -

enter image description here

我做错了什么?是因为我的django源代码是TemplateView吗?或者,我需要做些什么才能让virtualenv / ctags“了解”django源代码?

3 个答案:

答案 0 :(得分:4)

标签确实是一个非常好的开始。 (它上面的东西太多了,所以我只会为你提供一个额外的关键字来搜索:ctags。)

在Vim中,它以 Ctrl +] 结束(在基本情况下)转到类/函数定义并返回 Ctrl + T

答案 1 :(得分:3)

我一直在使用exuberant ctagstaglist来获取vim。使用 ctrl ] 跳转到当前窗口中的类定义, ctrl w ] 跳转到拆分窗口中的定义。

您可以通过自制软件安装充满活力的ctags:

brew install ctags

请务必使用自制的/usr/local/bin安装的那个,而不是ctags中的旧版/usr/bin

--python-kinds=-vi放在~/.ctags中以跳过Python文件的索引变量和导入也很有帮助。

另一种替代方法是使用cscopepyscope的变体,但必须在启用cscope选项的情况下编译vim。

答案 2 :(得分:3)

Python附带的IDLE编辑器具有an effective class browser,可以有效地导航给定模块中的所有内容。我相信在inspect modulepyclbr module的帮助下修改该工具以导航完整的类层次结构并不困难。