some time i see some classes defined as subclass of object class, as
class my_class(object):
pass
how is if different from the simple definition as
class my_class():
pass
some time i see some classes defined as subclass of object class, as
class my_class(object):
pass
how is if different from the simple definition as
class my_class():
pass
This syntax declares a new-style class.
The first one is a new style class and the second is the old style class.
EDIT
In [1]: class A:
...: pass
...:
In [2]: class B(object):
...: pass
...:
In [3]: a = A()
In [4]: b = B()
In [5]: dir(a)
Out[5]: ['__doc__', '__module__']
In [6]: dir(b)
Out[6]:
['__class__',
'__delattr__',
'__dict__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__module__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']
For Python 3.x, there is no difference. In Python 2.x, deriving from object
makes a class new-style, while providing no base classes will give you an old-style class.
For new-style classes in Python 2.x, you MUST explicitly inherit from object
. Not declaring that a class inherit from object
gives you an old-style class. In Python 3.x, explicitly inheriting from object
is no longer required, so you can just declare in Python 3.x with Python 2.x old-style class syntax class Klass: pass
and get back a new-style (or just a class) class.