I\'m trying to translate some python code to scala code. So I\'m a total noob in Python.
But why do some classes have object as a parameter but never explicitly use
1)Class name (object): 2) class name: They both are same but first one quite better in terms of writing,it look better while inheriting other classes to another,i t looks homogeneous.
How same ? So,every thing in Python is come under object means every thing in Python has property of object,if write or don't it will understand it. In first we explicitly tell it in second we didn't.
In Python2 this declares Table
to be a new-style class (as opposed to "classic" class).
In Python3 all classes are new-style classes, so this is no longer necessary.
New style classes have a few special attributes that classic classes lack.
class Classic: pass
class NewStyle(object): pass
print(dir(Classic))
# ['__doc__', '__module__']
print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
Also, properties and super do not work with classic classes.
In Python2 it is a good idea to make all classes new-style classes. (Though a lot of classes in the standard library are still classic classes, for the sake of backward-compatibility.)
In general, in a statement such as
class Foo(Base1, Base2):
Foo
is being declared as a class inheriting from base classes Base1
and Base2
.
object
is the mother of all classes in Python. It is a new-style class, so inheriting from object
makes Table
a new-style class.
Just a note that the “new-style" vs “old-style” class distinction is specific to Python 2.x; in 3.x, all classes are “new-style”.
The Table
class is extending a class called object
. It's not an argument. The reason you may want to extend object
explicitly is it turns the class into a new-style class. If you don't explicitly specify it extends object
, until Python 3, it will default to being an old-style class. (Since Python 3, all classes are new-style, whether you explicitly extend object
or not.)
For more information on new-style and old-style classes, please see this question.
class Table and class Table(object) are no different for Python.
It's not a parameter, its extending from object (which is base Class like many other languages).
All it says is that it inherits whatever is defined in "object". This is the default behaviour.
object is the most base type of class object defined in python. Attributes of object can be seen as below
**>>> dir(object)
['class', 'delattr', 'doc', 'format', 'getattribute', 'hash', 'init', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook']**
So Table(object) is just inheritance.!