Utilisez-vous SymPy, tout le monde? Lorsque vous utilisez SymPy avec Jupyter Notebook, la formule de sortie est magnifiquement mise en forme et affichée. Quelque chose comme ça. Savez-vous comment créer un objet capable de produire une sortie aussi riche?
Il a été écrit dans la documentation IPython. Ceci peut être réalisé en implémentant une méthode nommée sous la forme _repr_ * _
. Ce qui s'applique à ce «*» est
il y a. Je pense que SymPy est probablement implémenté dans LaTeX, mais cette fois, utilisons un SVG facile à comprendre.
Face() + Eye(35, 40) + Eye(65, 40) + Mouth(50, 75)
La mise en œuvre est la suivante.
class Component():
def __init__(self, items = None):
self.items = items or [self]
def __add__(self, target):
return Component(self.items + target.items)
def _repr_svg_(self):
return ''.join([
'<svg width="100" height="100">',
*map(str, self.items),
'</svg>'
])
class Face(Component):
def __str__(self):
return '<circle cx="50" cy="50" r="45" fill="none" stroke="black" stroke-width="1" />'
class Eye(Component):
def __init__(self, x, y):
super().__init__()
self.x, self.y = x, y
def __str__(self):
return f'<circle cx="{self.x}" cy="{self.y}" r="5" fill="black" />'
class Mouth(Component):
def __init__(self, x, y):
super().__init__()
self.x, self.y = x, y
def __str__(self):
return f'<path d="M{self.x} {self.y} l15 -5 h-30 Z" fill="none" stroke="black" stroke-width="1" />'
Recommended Posts