Verwenden Sie SymPy, alle? Bei Verwendung von SymPy mit Jupyter Notebook ist die Ausgabeformel schön geformt und wird angezeigt. Etwas wie das. Wissen Sie, wie man ein Objekt erstellt, das eine so reichhaltige Ausgabe erzeugen kann?
Es wurde in IPython-Dokumentation geschrieben. Dies kann erreicht werden, indem eine Methode implementiert wird, die in der Form "repr * _" benannt ist. Was für dieses *
gilt, ist
es gibt. Ich denke, SymPy ist wahrscheinlich in LaTeX implementiert, aber dieses Mal verwenden wir eine leicht verständliche SVG.
Face() + Eye(35, 40) + Eye(65, 40) + Mouth(50, 75)
Die Implementierung ist wie folgt.
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