sublime atom python autocomplete python-jedi

atom - python jedi: ¿cómo recuperar métodos de instancias?



python jedi vim (1)

Esto parece un error, donde jedi.evaluate.representation.Instance.__getattr__() bloquea erróneamente la evaluación de .names_dict . Agregué una solicitud de extracción al repositorio jedi para arreglar esto. Mientras tanto, puede agregar ''names_dict'' a la lista blanca en Instance.__getattr__() en su copia de jedi/evaluate/representation.py , o usar el siguiente código para parchear este método automáticamente para la sesión actual.

import jedi def patch_jedi(): __old__getattr__ = jedi.evaluate.representation.Instance.__getattr__ def __patched__getattr__(self, name): if name == ''names_dict'': # do a simplified version of __old__getattr__, bypassing the name check return getattr(self.base, name) else: # use standard behavior return __old__getattr__(self, name) # test whether jedi has been updated to avoid the Instance.defined_names() bug try: jedi.names("lst = list()")[0].defined_names() except AttributeError as e: if e.args[0].startswith("Instance ") and e.args[0].endswith("Don''t touch this (names_dict)!"): # patch jedi to avoid this error print "patching jedi" jedi.evaluate.representation.Instance.__getattr__ = __patched__getattr__ else: # something else strange is going on raise patch_jedi() print jedi.names("lst = list()")[0].defined_names() # or: print jedi.Script("lst = list()").goto_definitions()[0].defined_names()

Debo señalar que no estoy familiarizado con jedi , por lo que no sé si se defined_names() que defined_names() funciona para las definiciones que crean instancias. El código anterior no arreglará referencias como jedi.names("lst = []")[0].defined_names() , y no hay un parche obvio para hacerlo. Entonces puede haber algo más profundo que yo desconozca. Esperemos que el desarrollador ayude a aclarar esto en respuesta a esa solicitud de extracción.

Construí un editor de texto simple con alguna función de accesibilidad para el software de lectura de pantalla. Estoy usando Python para .NET (pythonnet) para mostrar un formulario que contiene un cuadro de texto enriquecido. Cuando el usuario presiona la pestaña después de un período, emerge un menú contextual con terminaciones para el elemento seleccionado. Ok, funciona bien con los objetos de Python, pero no funciona con los objetos en vivo .NET, no hay solución para este problema. Ahora, quiero construir un objeto TreeView con todos los nombres y definiciones del módulo que estoy editando.

Entonces, por ejemplo, escribo:

import sys import os lst = list()

etc ... Si uso jedi.names de mi fuente, puedo recuperar os, sys y lst. Para cada nombre, quiero recuperar definiciones secundarias, como funciones para el módulo sys y os, y métodos para lst. No puedo encontrar una manera de hacer esto con jedi:

names = jedi.names(MySource) names[0].defined_names() # works for sys names[1].defined_names() # works for os names[2].defined_names() # doesn''t work for lst instance of list().

¿Alguna sugerencia? Traté de usar más y más editores, pero el soporte de accesibilidad es muy, muy malo ...