I see some similar questions about this topic, but i wish to be sure, so i am asking...
What is the difference between:
class MyClass:
pass
and
class MyClass():
pass
Also, is there a difference between these two:
class MyClass():
pass
class MyClass(object):
pass
Class declarations of the type
class MyClass(object)
are New Style classes on Python 2.xGuido writes about some of the thinking that brought about the new classes in the History of Python
There is no difference between the first two spellings.
In python 2.7, there is a huge difference between the latter two. Inheriting from
object
makes it a new-style class, changing the inheritance semantics and adding support for descriptors (@property
,@classmethod
, etc.). It's the default in Python 3.New-style classes were introduced in Python 2.2 to unify types (such as
int
andlist
), and classes, and because several things change in backwards-incompatible ways, you need to 'opt in', explicitly inherit fromobject
to enable the changes.In Python 3, inheriting from
object
is no longer needed, classes are new-style, always.There is no difference between
class MyClass
andclass MyClass()
. The second question is dependent on your python version. On python3.x, there is no difference -- On python2.x, the latter (where you inherit fromobject
) creates a new-style class rather than an old-style class. In python3.x, ALL classes are new-style. New style classes are preferred these days -- As such, I always make sure that my classes inherit from object.