#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.
Во втором фрагменте первый связывает ссылку на класс, а второй — ссылку на новый экземпляр класса.