2015-08-12 5 views
5

Wir einen benutzerdefinierten Typ registrieren kann sagen numpy.polynomial.polynomial mit ipython Motor Anzeige alsCustom Display Ausgang für Liste der objA

ip = get_ipython() 

foramtter = ip.display_formatter.formatters['text/latex'] 

foramtter.for_type_by_name('numpy.polynomial.polynomial', 
          'Polynomial', display_func) 

folgen würde ich die .for_type_by_name verwenden möchten (...) Methode Um eine benutzerdefinierte Anzeige für eine Liste eines bestimmten Typs zu registrieren, sagen Sie ObjA nicht nur den Typ ObjA selbst.

Wie kann ich das tun?

Btw, ich habe keinen Zugriff auf die Klasse, die die Liste von ObjA zurückgibt.

+0

Sie können ein Python-Tag hinzufügen und ein wenig mehr Details bereitstellen. – cel

+0

Hmm ... Wenn ich noch einmal über diese Frage nachdenke, glaube ich, dass es einen saubereren Weg geben muss, indem man einen benutzerdefinierten Formatierer wie [Sage does this] erstellt (https://github.com/sagemath/sage/blob/master/src/sage) /repl/display/formatter.py) und ersetzt "text/plain". Habe momentan keine Zeit, um mit dem Schnipsel zu arbeiten, sorry. – drdaeman

Antwort

0

Wie wäre es mit einem Formatierer für list Objekte, die nur funktionieren würden, wenn sie eine Liste von ObjA's sieht?

from decimal import Decimal # Decimal is my ObjA here 

ip = get_ipython() 
formatter = ip.display_formatter.formatters['text/latex'] 

def format_list(obj): 
    if not isinstance(obj, list): 
     return None 
    if not all(isinstance(item, Decimal) for item in obj): 
     return None 
    return "$$[%s]$$" % ";".join(map(str, obj)) 

formatter.for_type_by_name('builtins', 'list', format_list) 

Es scheint, dass, wenn die Formatierungsfunktion None zurückgibt, wird die Forma ignoriert. Wenigstens funktioniert es für mich:

In[2]: [Decimal("1"), Decimal("2"), "not a decimal"] 
Out[2]: [Decimal("1"), Decimal("2"), "not a decimal"] 

In[3]: [Decimal("1"), Decimal("2")] 
Out[3] 1, 2 # LaTeX-formatted, yeah 

Dies ist ein ziemlich schmutzig Hack, aber leider sehe ich keine andere Möglichkeit (außer Affen Patchen DisplayFormatter, die noch schmutziger ist, obwohl es stärker sein sollte). Wenn ja, hoffe, dass uns jemand aufklären würde.