当前位置:  开发笔记 > 编程语言 > 正文

如何让IPython按类组织标签完成的可能性?

如何解决《如何让IPython按类组织标签完成的可能性?》经验,为你挑选了1个好方法。

当一个对象有数百种方法时,标签完成很难使用.通常情况下,有趣的方法是被检查对象的类而不是其基类定义或覆盖的方法.

如何让IPython对其选项卡完成的可能性进行分组,以便首先在被检查对象的类中定义的方法和属性,然后是基类中的方法和属性?

它看起来像未记录的inspect.classify_class_attrs(cls)函数,并inspect.getmro(cls)提供了我需要的大部分信息(这些信息最初用于实现python的help(object)功能).

默认情况下,readline按字母顺序显示完成,但用于显示完成的函数可以用ctypes或Python 2.6及更高版本中包含的readline模块替换.我已经覆盖了readline的完成显示,效果很好.

现在我只需要一种方法来合并每个类信息(来自inspect.*上面)和每个实例信息,按方法分辨率顺序排序结果,漂亮的打印和分页.

对于额外的功劳,最好存储所选的自动完成,并在下次尝试对同一对象进行自动完成时首先显示最常用的选项.



1> joeforker..:

由于我还没有使用Python 2.6或3.0而没有readline.set_completion_display_matches_hook(),我可以使用ctypes设置completion_display_func如下:

from ctypes import *

rl = cdll.LoadLibrary('libreadline.so')

def completion_display_func(matches, num_matches, max_length):
    print "Hello from Python"
    for i in range(num_matches):
        print matches[i]

COMPLETION_DISPLAY_FUNC = CFUNCTYPE(None, POINTER(c_char_p), c_int, c_int)
hook = COMPLETION_DISPLAY_FUNC(completion_display_func)
ptr = c_void_p.in_dll(rl, 'rl_completion_display_matches_hook')
ptr.value = cast(hook, c_void_p).value

现在,当我按"tab"完成时,我自己的功能会打印完成列表.因此,它回答了"如何更改readline显示完成的方式"的问题.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有