Для определения класса, без наследования, есть ли разница или стилистические предпочтения между:класс M: или класс M() :?
class M:
pass
и
class M():
pass
?
Я не мог найти его в PEP8.
Для определения класса, без наследования, есть ли разница или стилистические предпочтения между:класс M: или класс M() :?
class M:
pass
и
class M():
pass
?
Я не мог найти его в PEP8.
Это не в PEP 8, потому что в первые дни Python 3 Гвидо предположил, что каждый должен явно наследовать от object
в течение переходного периода. Возможно, это должно быть обновлено ...
Однако, если вы посмотрите на все примеры в документации, которые не используют class M(object):
, все они используют первый формат, class M:
.
Например, см. Class Definition Syntax, Class Objects и все следующие разделы учебника. (И обратите внимание, что в учебнике даже не объясняется, что в круглых скобках можно использовать нулевые базовые классы.)
(Кроме того, по крайней мере, для меня второй формат подразумевает, что вы явно пытаетесь наследовать из ничего, что вводит в заблуждение, в то время как первое подразумевает, что вы просто делаете то, что по умолчанию.)
+1. PEP8 был фактически написан с Python 2 в виду, когда существовала [фактическая разница] (http://stackoverflow.com/questions/54867/old-style-and-new-style-classes-in-python) между наследованием явно из 'object' и ничего не указывая. Я также соглашусь с тем, что пустые круглые скобки сделают его несколько неоднозначным, если он наследуется от объекта или нет (хотя он всегда будет). Таким образом, первый вариант был бы предпочтительным. – poke
@poke: Отличное дополнение. Но PEP8 должен развиваться с помощью языка (он был недавно изменен 1 августа 2013 года), поэтому, возможно, сегодня он должен охватывать этот случай. Но это то, что нужно обсуждать в трекере ошибок или в одном из списков, если кто-то заботится достаточно сильно, чтобы изменить его. – abarnert
Если это не в PEP8, еще одно хорошее место, чтобы получить совет - взглянув на стандартную библиотеку –
FWIW, я все еще попадаю в лагерь всегда наследуется от 'object' ... хотя это довольно бессмысленно в python3.x ... – mgilson
@mgilson: Поскольку они переписали учебник, чтобы удалить все базы' (object) 'в какой-то момент, я думаю, что это более не подлежащий утверждению: «каждый должен всегда унаследовать от« объекта ». Он все еще отлично подходит возможно, так всегда, но это все еще оставляет открытым вопрос о том, «когда люди этого не делают, как им это называть?», что и спрашивает ОП. – abarnert