Разница между классом (Python) и структурой (C)

Я новичок в питоне. Я изучал C и заметил, что структура C (структура), похоже, выполняет ту же задачу, что и «класс» в python. Так в чем же концептуально разница?

Ответов (5)

Решение

Помимо многочисленных технических различий в том, как они реализованы, они служат примерно одной цели: организации данных.

Большая разница в том, что в Python (и других объектно-ориентированных языках, таких как C++, Java или C#) класс также может иметь связанные с ним функции, которые работают только с экземпляром класса, тогда как в C функция, которая желает для работы со структурой должен каким-то образом принимать структуру как параметр, обычно с помощью указателя.

Я не буду углубляться в технические различия между ними, поскольку они довольно значительны, но я предлагаю вам изучить концепцию объектно-ориентированного программирования .

Не вдаваясь в детали, думайте о структуре C как о способе организации данных, в то время как «класс» Python (или C++ или Objective-C) - это способ организации не только ваших данных, но и операций. для этих данных. «Класс» Python, например, может наследовать от других объектов, чтобы предоставить вам интерактор для данных, связанных с ним (или вы можете написать свой собственный интегратор в классе). Я уверен, что есть еще кое-что, что можно сказать, но это довольно быстро входит в «что такое ООП», выходя далеко за рамки этой темы.

Структуры инкапсулируют данные.

Классы инкапсулируют поведение и данные.

Одна вещь, о которой не упоминалось, - это то, что структуры C являются типами значений, тогда как классы Python являются ссылочными типами.

Например, рассмотрим это утверждение:

var1 = var2

Если бы var1 и var2 были структурами C, то этот оператор скопировал бы содержимое var2 в var1. Это копия по значению .

Однако если бы var1 и var2 были объектами Python, тогда этот оператор заставил бы var1 ссылаться на объект, на который ссылалась var2. (Они похожи на указатели на структуры в C.) Это копирование по ссылке .

То же самое происходит при передаче аргументов функциям (потому что они должны быть скопированы, чтобы попасть в функцию).

Классы обычно имеют связанные с ними методы (которые в основном являются просто функциями), тогда как C-структуры - нет. Вы, вероятно, захотите узнать, что такое объектно-ориентированное программирование, если хотите эффективно использовать классы в Python (или любом другом объектно-ориентированном языке, таком как Java или C++).

Конечно, можно использовать класс Python так же, как и структуру C, в качестве контейнера для данных. Но это делается не очень часто.