Можно ли переопределить литералы в Python?

Не могу найти способ лучше сформулировать заголовок, не стесняйтесь исправлять.

Я довольно новичок в Python, в настоящее время экспериментирую с языком ... Я заметил, что все встроенные типы не могут быть расширены с другими членами ... Я хотел бы, например, добавитьeach метод кlist типа, но это было бы невозможно. Я понимаю, что он разработан таким образом из соображений эффективности, и что большинство встроенных типов реализовано в C.

Ну, одна из причин, почему я обнаружил, что нужно переопределить это поведение, это определить новый класс, которыйlist но в остальном ничего не делает. Тогда я могу назначить переменнуюlist в этот новый класс, и каждый раз, когда я хотел бы создать новый список, я бы использовалlist конструктор, как это было бы использовано для создания оригиналаlist тип.

class MyList(list):
    def each(self, func):
       for item in self:
           func(item)
list = MyList

my_list = list((1,2,3,4))
my_list.each(lambda x: print(x))

Выход:

1
2
3
4

Идея, конечно, может быть обобщена путем определения метода, который получает встроенный тип it и возвращает класс, расширяющий этот тип. Дальше больше, оригиналlist переменная может быть сохранена в другой переменной, чтобы сохранить к ней доступ.

Единственная проблема, с которой я сталкиваюсь сейчас, - это когда вы создаетеlist в буквальном смысле этого слова (т.е.[1,2,3,4]), он по-прежнему будет использовать оригинальный конструктор списка (или это так?). Есть ли способ переопределить это поведение? Если ответ «нет», знаете ли вы какой-нибудь другой способ дать пользователю возможность расширять встроенные типы? (так же, как javascript позволяет расширять встроенные прототипы).

Я нахожу это ограничение встроенных функций (неспособность добавлять членов к ним) одним из недостатков Python, делая его несовместимым с другими пользовательскими типами ... В целом, я действительно люблю язык, и я действительно не понимаю, почему это ограничение действительно необходимо.

Ответы на вопрос(1)

Ваш ответ на вопрос