Как сделать переопределение функции «».format() на Python?

Требуется рассширить возможности функции " .format() ". Как я понял есть два варианта:
  1. Модернизировать существующую, но не нашёл, где её исходник, только кусочек в __builtin__.py
    Подскажите, где смотреть?
    def format(*args, **kwargs): # known special case of str.format
            """
            S.format(*args, **kwargs) -> string
            
            Return a formatted version of S, using substitutions from args and kwargs.
            The substitutions are identified by braces ('{' and '}').
            """
            pass

  2. Создать отдельную функцию, чтобы можно было вызвать её, так же, например:
    "".my_format()

Скажите, как это правильно сделать?
UPD: c конструкцией "".my_format() - ясно, тогда где посмотреть сам исходный код функции .format() ?
UPD: Вопрос закрыт, ответ получен
  • Вопрос задан
  • 894 просмотра
Решения вопроса 1
@idap
интересуюсь python, latex, linux, ML, AI
format() — это метод объекта типа str. Вы можете создать свой класс, наследуемый от него.

class A(str):
    def format(self, *args):
        print(args)

a = A("example")
a.format(1, 2, 3)


Если попытаться сделать так:
a = ""
a.format = None

то вам скажут, что "'str' object attribute 'format' is read-only"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
Вообще, метод формат обращается к магическим методам объектов, которые и определяют поведение
>>> (1).__format__
<built-in method __format__ of int object at 0x4cba34a0>
>>>


Пример, как можно вводить свои спецификаторы
>>> class Int(int):
...     def __format__(self, spec):
...         if spec.startswith('x'):
...             return str(self) * int(spec[1:])
...         return super().__format__(spec)
... 
>>> n = Int(10)
>>> '{:05d} {:x5}'.format(n, n)
'00010 1010101010'
>>>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы