Можно ли переопределить литералы в 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)

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