Объект как теоретическая конструкция очень прост: это структура, которая хранит данные, функции или и то, и другое. Идея состоит в том, что эти структуры имеют чувство «я», которое неявно присутствует в большинстве языков за пределами Python. Это называется «дескриптором» и дает объекту точку самоссылки, которая связывает данные (переменные или поля) и функции (обычно называемые методами) с конкретным объектом, о котором идет речь. Идея заключается в том, что вы специально используете переменную или метод, который принадлежит этому конкретному экземпляру (выделенному блоку памяти, как правило, ниже), а не какой-то более крупной, более общей конструкции.
Объектные системы имеют тенденцию варьироваться в отношении двух больших категорий: наследование и доступ.
В некоторых, например в Java или C ++, вы объявляете классы, которые действуют как «чертежи» для объектов, которые затем выделяются. Эти классы и их объекты не могут быть структурно изменены после создания экземпляра. Их содержимое может быть переопределено в том смысле, что переменные могут изменяться, но их структура является статической. Например, вы не можете добавлять новые методы в HashMap в Java. Вы можете расширить интерфейс (в основном частично реализованные классы, служащие контрактами) или создать подкласс, чтобы получить дополнительные методы или переменные, которые вам нужны, вместе со всеми исходными переменными и методами конкретного рассматриваемого класса.
Другие языки на основе классов, наиболее часто упоминаемый как Ruby, позволяют легко открывать существующий класс и просто добавлять методы по своему усмотрению. Это яблоко раздора, и многие считают его очень и очень опасным.
Javascript еще слабее, объекты - это не что иное, как набор слотов для переменных или функций. Они могут быть изменены или перезаписаны всякий раз, когда программист чувствует необходимость в этом. Их можно даже произвольно клонировать как «прототипы» для других объектов, тем самым передавая все свои способности.
Контроль доступа является еще одной большой разницей между различными языками.
Некоторые языки, такие как Java, имеют очень строго обязательные модификаторы доступа, такие как «private» и «protected», которые точно определяют, какие классы и подклассы могут использовать данную переменную или метод.
Другие, такие как Python, менее формальны и используют соглашение о подчеркивании перед именем метода или переменной, чтобы указать, что оно является закрытым.
В конечном счете, Python является совершенно законным языком для программирования объектно-ориентированным способом, но он не обеспечивает его столь же строго, как некоторые другие.