Хватит жить в неведении и не знать, как пройдёт твой день
IT-колода расставит всё по местам.
Что тебя ждёт? Завал задачами, вновь вылезший баг, похвала от тимлида? Вытаскивай карту из колоды и узнай, что приготовила для тебя судьба на день грядущий: https://tprg.ru/CifG
Реклама
IT-колода расставит всё по местам.
Что тебя ждёт? Завал задачами, вновь вылезший баг, похвала от тимлида? Вытаскивай карту из колоды и узнай, что приготовила для тебя судьба на день грядущий: https://tprg.ru/CifG
Реклама
🤡3
👍4👎1
Марк Лутц, «Изучаем 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 обнаруживается в суперклассе А, потому что в классических классах
поиск при наследовании поднимается настолько высоко, насколько может, прежде
чем остановиться и начать движение вправо».
👍4👎1
👎2👍1
x = D() # создаем экземпляр класса D, но НЕ вызываем никаких методов
Метод meth() содержит print('C.meth'), но этот print() выполняется только при вызове метода.
👍2👎1
«object.__slots__
...__slots__ резервирует место для объявленных переменных и предотвращает автоматическое создания dict и weakref для каждого экземпляра».
В задаче выше мы «зафиксировали» список атрибутов и не допускаем добавление ape.
Средство слотов задумывалось как способ отлавливания опечаток.
👍5👎1
🤯2👍1👎1
Что происходит:
1. Класс C - пустой базовый класс
2. Класс D наследует от C и имеет __slots__ = ['a'] - это означает, что экземпляры класса D могут иметь только атрибут a
3. X = D() - создается экземпляр класса D
4. X.a = 1 - устанавливается атрибут a (разрешенный слот)
5. X.b = 2 - устанавливается атрибут b (НЕ разрешенный слот)
Почему же в __dict__ только {'b': 2}? Когда вы используете, атрибуты, указанные в __slots__ (в данном случае a) хранятся в специальной структуре данных, а не в __dict__. Атрибуты, НЕ указанные в __slots__ (в данном случае b) хранятся в __dict__ как обычно.
❤2👍1👎1🤨1
«
Преобразует метод в статический. Такой метод не получает неявного первого аргумента:
class C:
def f(arg1, arg2, argN): ...
Форма
Статический метод может быть вызван как для класса (например, C.f()), так и для экземпляра (например, C().f())».
Декораторы позволяют расширять и изменять поведение вызываемых объектов (функций, методов и классов) без постоянного изменения самого вызываемого объекта.