Можно ли переопределить литералы в 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 'недостатки, делающие его несовместимым с другими пользовательскими типами ... В целом, я действительно люблю язык, и я действительно неЯ не понимаю, почему это ограничение действительно необходимо.