Определение класса в Python

#python #class #class-design

#python #класс #класс-дизайн

Вопрос:

 class Car:
    pass

class Car():
    pass
  

В чем разница между этими двумя?
и,

 a = Car

a = Car()
  

кроме того, в чем разница между этими двумя вышеописанными?

С наилучшими пожеланиями

Комментарии:

1. Кстати, обычно вам следует наследовать от object (например. class Car(object) ), чтобы извлечь выгоду из классов нового стиля.

Ответ №1:

первый оператор a = Car просто создает a псевдоним для Car класса. Итак, после того, как вы это сделаете, вы могли бы сделать b = a() , и это было бы то же самое, что b = Car()

Как только вы присоединяете () в конце, это заставляет python фактически инициализировать класс (либо __call__ , либо просто инициализировать, но вам не нужно беспокоиться об этом), и a становится тем, что возвращается Car() , в данном случае это экземпляр класса.

Что касается разницы между class Car: и class Car(): . Второй — недопустимый синтаксис (редактировать: до версии 2.5 я бы все равно сказал, что это своего рода плохой стиль, поскольку для него нет причин, если вы не наследуете). Причина, по которой у вас есть скобки, заключается в том, что вам нужно наследовать другой класс.

Комментарии:

1. Второй синтаксис не был недопустимым с версии 2.5.

Ответ №2:

В первом фрагменте последний является недопустимым синтаксисом в более старых версиях Python.

Во втором фрагменте первый связывает ссылку на класс, а второй — ссылку на новый экземпляр класса.