Обычный метод получает self, staticmethod не получает скрытого аргумента, classmethod получает cls, а property вызывается как атрибут. StudentPlus наследует всё это и меняет default_course.
В обычном CPython ожидаются True и False, но полагаться на is для чисел нельзя. Гарантированы значения x == 100 и y == 1100, а не идентичность объектов.
Присваивание связывает имя с объектом, не копируя его. Одинаковые строки могут разделять объект из-за оптимизаций, но сравнивать их содержимое следует через ==.
Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.
Синтаксис допустим, но staticmethod ошибочно ожидает self, а property — лишний a. classmethod работает с именем self, хотя по соглашению его нужно назвать cls. Свойство читается без скобок.
Вызовите явно Ancestor.start на экземпляре с именем 'bob'. Исходный Child('Bob') ничего не печатает, а обычный bob.start() выбрал бы Parent1.start по MRO.
is проверяет идентичность, а не числовое равенство. В CPython малые целые обычно переиспользуются, но поведение за пределами кеша зависит ещё и от компиляции констант; правило «257 всегда разные» неверно.
Вывод будет [10], затем [123], затем [10, 'a']. Первый и третий вызовы используют общий список по умолчанию, а второй получает отдельный явно созданный пустой список.