W Pythonie 3.6, można użyć f-strings lubię:Czy możesz przeciążyć "operator" w łańcuchu znaków Python 3.6?
>>> date = datetime.date(1991, 10, 12)
>>> f'{date} was on a {date:%A}'
'1991-10-12 was on a Saturday'
chcę przeciążać metody przyjmujący powyższy '%A'
. Czy można to zrobić?
Na przykład, jeśli chciałem napisać niemego owijkę wokół datetime
, mogę oczekiwać tego przeciążenia, aby wyglądać tak:
class MyDatetime:
def __init__(self, my_datetime, some_other_value):
self.dt = my_datetime
self.some_other_value = some_other_value
def __fstr__(self, format_str):
return (
self.dt.strftime(format_str) +
'some other string' +
str(self.some_other_value
)
[Tutaj jest jeden przygotowany wcześniej] (https://gist.github.com/wimglenn/3186645d0474550160d3210bf488f8f8). – wim
dla pewnej większej elastyczności, możesz zastąpić metody udostępnione w klasie "string.Formatter" (https://docs.python.org/3.4/library/string.html#string.Formatter) - takie jak ' get_field', 'get_value',' check_unused_args', 'format_field' i' convert_field' - aby uzyskać bardziej szczegółową kontrolę nad zachowaniem funkcji 'format'. –