Один из способов понять, как python по-разному относится к классам, - это то, что каждый язык делает с классом. В C ++ каждый класс сам по себе является определением «макета переменных-членов экземпляров», а также добавляет некоторые метаданные в таблицу, которую среда выполнения C ++ будет использовать для определения порядка разрешения методов.
Python работает совсем по-другому; сам класс не определяет расположение атрибутов; скорее, когда пришло время создать экземпляр класса, среда выполнения берет union всех __slots__
, определенных в каждом родительском классе для этого конкретного экземпляра.
В C ++ то, как вы определяете классы, определяет, как эти классы собираются, но в python они просто как-то перемешаны (но все еще четко определены), так что вы не можете точно сказать, где один. класс заканчивается, а следующий начинается на уровне отдельного экземпляра, и это на самом деле является лишь следствием того, что объекты Python являются просто «пакетами атрибутов»