Когда вы определяете класс просто так class Complex
, вы не наследуете класс от любого другого класса и, следовательно, он имеет только те атрибуты, которые вы определяете как __init__
(и __doc__
и __module__
.)Это класс старого стиля.
Когда вы определяете такой класс - class Complex(object)
, это означает, что вы наследуете класс от класса object
.В результате многие его атрибуты наследуются автоматически без необходимости самим определять их снова, например __str__
, __class__
и т. Д. Это новый стиль класс.
В Python2.x новые классы стилей обычно предпочтительнее, так как использование классов старых стилей может привести к некоторым проблемам.Например, __slots__
, super
, descriptors
не работают в классах старого стиля.
Классы старого стиля были сохранены в python 2.x просто для обеспечения обратной совместимости.В Python 3 это очищено, и любой класс, который вы определяете, является новым классом стиля.
(Кроме того, из того, что вы говорите, наследование от object
не имеет ничего общего только с определением __init__
.)