Почему-то при наличии типа bool isinstance(element, str) всё равно выводит bool. Почему. То есть: lst = [1, 2, 3, 10.5, "Hi", True, False] for element in lst: if isinstance(element, (int, float)): print(element) ---> всё равно выводит True и False, в том числе
Спасибо за видео! Прошу рассмотреть возможность демонстрации в видео запуска стороннего проекта с github, например github.com/gaphor/gaphas - интересное приложение на python.
Спасибо за урок! Такой вопрос: а есть ли разница как мы проверим переменную? Т.е. почему вместо "isinstance(i,...)" просто не использовать "type(i) == ..." ? Логика проверки другая но ответ вроде тот-же...
isinstance работает не только для конкретного типа, но и для всех потомков объекта (наследуемых классов). Поэтому при проверке типов type лучше вообще никогда не использовать, если только не требуется строго какой то конкретый тип.
@@leonidalexeev4098 Например есть словарь, а есть упорядоченный словарь (collections.OrderedDict) и словарь со значениями по умолчанию (collections.DefaultDict). Они умеют делать одни и те же вещи и для пользователя нет разницы какой из них применён. Если пользоваться isinstance то проблем не будет т.к. это всё словари. А если буквально проверять их типы, то можно наткнуться на проблемы в самых неожиданных местах. Это не имеет значения, когда сам пишешь код. Но когда работаешь с библиотеками, оттуда постоянно прилетают объекты специфических типов. Поэтому надо проверять не тип, а умение что то делать, для чего по сути и нужна isinstance.
@@Игорь-ч6ф3и то есть, функция isinstance проверяет супер-класс, основной класс объекта, а type дочерний класс, если такой имеется, который является наследником основного?
Спасибо! Спасибо за все уроки.
Артём, уже писала вам и напишу еще раз. Вы просто супер!
Артём, спасибо за отличное объяснение! Всё понятно.
Отличный урок.
Спасибо! Спасибо за все твои видосы!!!
спасибо
Thanks Artem. Great info.
Почему-то при наличии типа bool isinstance(element, str) всё равно выводит bool. Почему. То есть:
lst = [1, 2, 3, 10.5, "Hi", True, False]
for element in lst:
if isinstance(element, (int, float)):
print(element) ---> всё равно выводит True и False, в том числе
Спасибо
Спасибо за видео!
Прошу рассмотреть возможность демонстрации в видео запуска стороннего проекта с github, например github.com/gaphor/gaphas - интересное приложение на python.
Спасибо за урок!
Такой вопрос: а есть ли разница как мы проверим переменную?
Т.е. почему вместо "isinstance(i,...)" просто не использовать "type(i) == ..." ?
Логика проверки другая но ответ вроде тот-же...
isinstance работает не только для конкретного типа, но и для всех потомков объекта (наследуемых классов). Поэтому при проверке типов type лучше вообще никогда не использовать, если только не требуется строго какой то конкретый тип.
@@Игорь-ч6ф3и не понял, что за наследуемые классы. Не могли бы объяснить в чем разница?
@@leonidalexeev4098 Например есть словарь, а есть упорядоченный словарь (collections.OrderedDict) и словарь со значениями по умолчанию (collections.DefaultDict). Они умеют делать одни и те же вещи и для пользователя нет разницы какой из них применён. Если пользоваться isinstance то проблем не будет т.к. это всё словари. А если буквально проверять их типы, то можно наткнуться на проблемы в самых неожиданных местах. Это не имеет значения, когда сам пишешь код. Но когда работаешь с библиотеками, оттуда постоянно прилетают объекты специфических типов. Поэтому надо проверять не тип, а умение что то делать, для чего по сути и нужна isinstance.
@@Игорь-ч6ф3и то есть, функция isinstance проверяет супер-класс, основной класс объекта, а type дочерний класс, если такой имеется, который является наследником основного?
@@ineednew9437 isinstance проверяет цепочку предков, а type смотрит только суперкласс.
А в эту функцию можно передавать только кортежи или списки тоже?
Списки тоже