class
Simple class with __init__
and __str__
methods:
class client(object):
def __init__(self, name, address, age):
self.name = name
self.address = address
self.age = age
def __str__(self):
return self.name + ', ' + self.address + ', ' + str(self.age)
Note: A new-style class is one that is derived, either directly or indirectly,
from a built-in type. The base class for all new-style classes is called
object
.
Name
New style classes:
type(self).__name__
For old (and new) style classes:
self.__class__.__name__
Method Resolution Order
From Python’s super() considered super!:
pprint(MyClassName.__mro__)
Note
See super
below.
Properties
Static and Class Methods
I am not sure I understand why we need classmethod
and staticmethod
(for more information see this article by Michael Fotsch).
Class Method
A class method is similar to a static method in that it has no self
argument. Instead, it receives a class as its first argument. By convention,
this argument is called cls
. A class method is defined using the
classmethod
descriptor:
class MyClass(object):
def SomeMethod(cls, x):
print cls, x
SomeMethod = classmethod(SomeMethod)
class DerivedClass(MyClass):
pass
>>> MyClass.SomeMethod(15)
__main__.MyClass 15
>>> obj = MyClass()
>>> obj.SomeMethod(15)
__main__.MyClass 15
>>> DerivedClass.SomeMethod(150)
__main__.DerivedClass 15
In the last call, you can see that only the class involved in making the method
call defines the value of the cls
argument. This is despite the fact that
the method has been defined in a different class.
Static Method
class MyClass(object):
def SomeMethod(x):
print x
SomeMethod = staticmethod(SomeMethod)
>>> MyClass.SomeMethod(15)
15
>>> obj = MyClass()
>>> obj.SomeMethod(15)
15
Note: You should really consider creating a static method whenever a method
does not make substantial use of the instance (self
).
super
For python 3:
def get_data(self, name):
data = super().get_data(name)
# do something with the data
return data