投稿

3月, 2023の投稿を表示しています

できるかな Python:全角文字でもPython書式を揃えたい

[ できるかな Python ] のコーナー ここでは 実用になるかはさておき 、Pythonで 出来たら楽しいって事をやってみる だけのコーナーです。 前回 、 前々回 と全角文字が揃わない問題を取り扱ってきたのだが!! とうとう、禁断のクラスを作ることに手を染めてしまった・・・ strをサブクラス化してみるという禁断の手に!! だって、 __format__()とかオーバーライドしてみたい じゃん! で、割とうまく言ったのだが!! 内部で使った正規表現が。。。いまいち自信ないね(笑) まあ、動いてるっぽいよ未来の俺! で、今回のレシピはこれ! <材料> str型 east_asian_width() 特殊メソッド__format__() 特殊メソッド__add__() 特殊メソッド__radd__() <作り方のポイント> __format__()メソッドで全角文字の時に対応する __add__()および__radd__()をオーバーライドして文字列の結合に対応する east_asian_width()で全角文字を判断する formatを正規表現を使って上手に料理する  ※これは保証できない(笑) stringw.py from __future__ import annotations # 自分自身のクラスを型注釈できるように(必ずソースの先頭) from unicodedata import east_asian_width from functools import reduce from typing import TypeVar, Generic, Callable import re class StringW(str): @property def length(self) -> int: return len(self) @property def width(self) -> int: # Japanese wide-char size is calculated as 2 bytes. return reduce(lambda a, c: