2013-11-25 5 views
2

Для определения класса, без наследования, есть ли разница или стилистические предпочтения между:класс M: или класс M() :?

class M: 
    pass 

и

class M(): 
    pass 

?

Я не мог найти его в PEP8.

+0

Если это не в PEP8, еще одно хорошее место, чтобы получить совет - взглянув на стандартную библиотеку –

+0

FWIW, я все еще попадаю в лагерь всегда наследуется от 'object' ... хотя это довольно бессмысленно в python3.x ... – mgilson

+0

@mgilson: Поскольку они переписали учебник, чтобы удалить все базы' (object) 'в какой-то момент, я думаю, что это более не подлежащий утверждению: «каждый должен всегда унаследовать от« объекта ». Он все еще отлично подходит возможно, так всегда, но это все еще оставляет открытым вопрос о том, «когда люди этого не делают, как им это называть?», что и спрашивает ОП. – abarnert

ответ

7

Это не в PEP 8, потому что в первые дни Python 3 Гвидо предположил, что каждый должен явно наследовать от object в течение переходного периода. Возможно, это должно быть обновлено ...

Однако, если вы посмотрите на все примеры в документации, которые не используют class M(object):, все они используют первый формат, class M:.

Например, см. Class Definition Syntax, Class Objects и все следующие разделы учебника. (И обратите внимание, что в учебнике даже не объясняется, что в круглых скобках можно использовать нулевые базовые классы.)

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

+1

+1. PEP8 был фактически написан с Python 2 в виду, когда существовала [фактическая разница] (http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python) между наследованием явно из 'object' и ничего не указывая. Я также соглашусь с тем, что пустые круглые скобки сделают его несколько неоднозначным, если он наследуется от объекта или нет (хотя он всегда будет). Таким образом, первый вариант был бы предпочтительным. – poke

+0

@poke: Отличное дополнение. Но PEP8 должен развиваться с помощью языка (он был недавно изменен 1 августа 2013 года), поэтому, возможно, сегодня он должен охватывать этот случай. Но это то, что нужно обсуждать в трекере ошибок или в одном из списков, если кто-то заботится достаточно сильно, чтобы изменить его. – abarnert

Смежные вопросы