Python: задачки и вопросы
Открыть в Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Больше6 961
Подписчики
-124 часа
-47 дней
-5630 день
Архив постов
Здесь речь также идет о принципе MRO (см. предыдущую задачу).
x = D() # создаем экземпляр класса D, но НЕ вызываем никаких методов
Метод meth() содержит print('C.meth'), но этот print() выполняется только при вызове метода.
Речь идет о так называемом ромбовидном наследовании и принципе MRO (Method Resolution Order).
Марк Лутц, «Изучаем Python», том 2, гл. 32:
«Путь поиска при наследовании в ромбовидных схемах выполняется больше в манере сначала в ширину ~ Python сначала ищет в любых суперклассах справа от только что просмотренного и только потом поднимается к общему суперклассу вверху. Другими словами, поиск проходит по уровням, прежде чем двигаться вверх.
...
class A: attr = 1 # Обычный класс
class B(A): pass # В и С ведут к А
class С(A): attr = 2
class D(B, С): pass # Проверяет С перед А
х = D()
print(х.attr) # Ищет в х, D, В, С
Атрибут x.attr обнаруживается в суперклассе А, потому что в классических классах
поиск при наследовании поднимается настолько высоко, насколько может, прежде
чем остановиться и начать движение вправо».
Хватит жить в неведении и не знать, как пройдёт твой день
IT-колода расставит всё по местам.
Что тебя ждёт? Завал задачами, вновь вылезший баг, похвала от тимлида? Вытаскивай карту из колоды и узнай, что приготовила для тебя судьба на день грядущий: https://tprg.ru/CifG
Реклама
Марк Лутц, «Изучаем Python», том 2, гл. 32:
«Помимо появления возможности создавать подклассы встроенных типов и реализовывать метаклассы — один из самых практических контекстов, где такое объединение “тип/класс” становится наиболее очевидным, касается явной проверки типов. Для классических классов Python 2.Х типом экземпляра класса является обобщенный «экземпляр» (instance), но типы встроенных объектов более специфичны:
class С(object): pass # Обычный класс
I = С() # Экземпляры создаются из классов
print(type(I)) # Выведет <class '__main__.С'>»
В данном примере:
- Создается класс С, наследующий от object
- Создается экземпляр I этого класса
- type(I) возвращает <class '__main__.С'>
Из документации Pandas:
DataFrame.set_index(keys, *, ...)
Устанавливает индекс датафрейма, используя существующие столбцы. В данном случае — timestamp.
DataFrame.asfreq(freq, ...):
Преобразует временной ряд в ряд заданной частоты. В данном случае — в ряд ежедневных (D — "Daily") значений.
DataFrame.ffill(*, ...):
Заполняет значения NA / NaN, распространяя последнее действительное наблюдение на следующее действительное. В данном случае — заполняет пропущенные значения в режиме "forward fill" (то есть выставляет значение предыдущего дня на следующий пустующий день).
Из документации Pandas:
- pandas.to_datetime(arg, ...)
Конвертирует аргумент в тип datetime (в временные метки без часовых поясов).
- Series.tz_localize(tz, ...)
Присваивает нулевой часовой пояс «наивной» временной метке
- Series.dt.tz_convert(*args, **kwargs)
Конвертирует временные метки с часовым поясом в указанный часовой пояс "Asia/Jakarta".
Несмотря на PEP8:
«... Избегайте лишних пробелов в следующих ситуациях:
...
... непосредственно перед открывающей скобкой, которая начинает список аргументов вызова функции:
spam(1) # верно
spam (1) # неверно»
Пробел между названием функции и скобкой не уронит программу.
