Python динамическая типизация

В языках типа C++ указывается тип переменной, тоже самое для классов и функций. Для того, чтобы класс мог работать с различными типами данных используется template Class T.


В питоне данного не требуется, используется динамическая типизация, возвращается тот тип, который больше подходит.


Вопрос: как это устроено под капотом?

Программирование на python

936 постов11.9K подписчиков

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Вы смотрите срез комментариев. Показать все
1
DELETED
Автор поста оценил этот комментарий

> В питоне данного не требуется, используется динамическая типизация, возвращается тот тип, который больше подходит.


Что  значит "возвращается тот тип, который больше подходит"?

>>> int([1])

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
раскрыть ветку (3)
0
Автор поста оценил этот комментарий

мне не надо заранее указывать с каким типом переменной я буду работать, и какой тип я буду возвращать из функции

раскрыть ветку (2)
4
DELETED
Автор поста оценил этот комментарий

> мне не надо заранее указывать с каким типом переменной я буду работать, и какой тип я буду возвращать из функции


Смотри как это работает:


В C++ выражение типа

auto x = MyClass();

создает переменную с идентификатором 'x' типа MyClass и инициализирует ее дефолтным конструктором.


В Python выражение типа

x = MyClass()

создает объект типа MyClass и привязывает (bind) к этому объекту символьное имя 'x'.

При этом к одному объекту можно привязать несколько имен

x = y = MyClass();

А можно перепривязать (re-bind) имя к другому объекту

x = MyClass()

x = MyOtherClass()

У имени типа нет.

А вот уже при выполнении конкретной операцией над объектом скрывающимся за именем и произойдет проверка типа с точки зрения допустимости операции.



В примере ниже при выполнении опкода BINARY_ADD случится ошибка, т.к. один из аргументов окажется неподходящим (объект загруженный по имени 'a' будет типа MyClass).

При этом, если раскомментировать строку 5, то символьное имя MyClass будет связано с объектом, представляющим встроенный тип int (а-ля плюсовое #define MyClass int).


В строке 9 операция LOAD_GLOBAL, обращаясь по имени MyClass, загрузит уже объект, представляющий встроенный тип int.


Затем "сконструирует" (CALL_FUNCTION) экземпляр этого типа и сохранит его под именем 'a' (STORE_FAST).


И в этом случае, несмотря на то, что байт-код функции example не изменится, ошибки при выполнении BINARY_ADD уже не будет.
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

arigatou

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества