«Класс» и «тип» означают разные вещи в разных языках и средах;Я попытаюсь показать здесь синтез, который помогает мне думать о проблеме.
У классов есть объекты, а у типов есть значения.Я думаю, что легче понять разницу между объектами и значениями, чем между классами и типами.Объект имеет 2 независимых свойства: его идентичность и его состояние / поведение.Таким образом, вы можете иметь два разных объекта с одинаковым классом и состоянием.Это не относится к значениям: у вас не может быть двух разных значений типа, которые имеют одинаковое состояние (или форму, форму) и поведение: у вас не может быть двух «двоих».Значение типа не имеет идентичности, независимой от его состояния и поведения.
Смешивая оба понятия вместе, вы можете сказать, что значение данного типа не обязательно имеет класс, но объект объектаданный класс обязательно имеет тип (например, объект), и его значение задается как его состоянием / поведением, так и его идентичностью.
У Haskell есть типы и определяемые, если я прав.Именно из Haskell я использую концепцию типа, которую я использую.Python имеет классы и типы, смешанные в одной системе типов, с некоторыми примитивными типами и богатыми определяемыми классами.Концепция объекта, который я использую, - это система типов Python, за исключением его примитивных типов: int, str и т. Д.
Еще одно ключевое отличие между типами и классами заключается в их определении.Типы типично определяются набором предикатов или ограничений, которые «дают» сразу все значения типа.Таким образом, вы можете использовать буквальное значение без необходимости его «создания»: 23438573. Определение класса включает в себя процедуру создания объектов, и все объекты этого класса должны быть созданы до того, как они будут использованы.