Note: The Python2.7 is used.
One, instance method
An instance method is a method that an instance of a class can use. As follows:
Copy Code code as follows:
Class Foo:
def __init__ (self, name):
Self.name = Name
def hi (self):
Print Self.name
if __name__ = = ' __main__ ':
foo01 = Foo (' Letian ')
Foo01.hi ()
Print type (Foo)
Print type (FOO01)
Print ID (foo01)
Print ID (Foo)
The results of the operation are:
Copy Code code as follows:
Letian
<type ' Classobj ' >
<type ' instance ' >
40124704
31323448[code]
As you can see, the type of Foo is Classobj (class object, the class defined in Python itself is also an object), and the foo01 type is instance (instance). and Hi () is an instance method, so Foo01.hi () will output ' Letian '. The first argument of an instance method defaults to self, which refers to an instance. Self is not a keyword, but an agreement. Init () is an instance method that is invoked by default when the instance is generated. Change the definition of Foo to the following form:
[Code]class Foo:
Def __init__ (this, name):
THIS.name = Name
def hi (here):
Print Here.name
The operation is still correct. The built-in function ID is used to view the identifier of the object, and the following is its doc content:
Copy Code code as follows:
>>> Print id.__doc__
ID (object)-> integer
Return is the identity of an object. This is guaranteed unique among
Simultaneously existing objects. (Hint:it ' s The object ' s memory address.)
Second, static method
A static method is a normal function that is in the namespace defined by the class and does not operate on any instance type. Use the adorner @staticmethod to define a static method. Both class objects and instances can call static methods:
Copy Code code as follows:
Class Foo:
def __init__ (self, name):
Self.name = Name
def hi (self):
Print Self.name
@staticmethod
def add (A, B):
Print A + b
if __name__ = = ' __main__ ':
foo01 = Foo (' Letian ')
Foo01.hi ()
Foo01.add (1,2)
Foo.add (1, 2)
The results of the operation are as follows:
Copy Code code as follows:
Note that many programming languages do not allow instances to invoke static methods.
Third, the class method
A class method is a method of manipulating the class itself as an object. The class method uses the @classmethod adorner definition, whose first argument is a class, and the Convention is written as a CLS. class objects and instances can call the class method:
Copy Code code as follows:
Class Foo:
name = ' Letian '
@classmethod
def hi (CLS, x):
Print Cls.name * x
if __name__ = = ' __main__ ':
foo01 = Foo ()
Foo01.hi (2)
Foo.hi (3)
The results of the operation are as follows:
Copy Code code as follows:
Letian Letian
Letian Letian Letian
Note that many other programming languages do not allow instances to invoke class methods.
Four, super
Super is used to perform functions in the parent class, for example:
Copy Code code as follows:
Class Foo (object):
def hi (self):
print ' Hi,foo '
Class Foo2 (Foo):
def hi (self):
Super (Foo2, self). Hi ()
if __name__ = = ' __main__ ':
Foo2 = Foo2 ()
Foo2.hi ()
Run Result:
Copy Code code as follows:
Note that the Foo class must inherit a class (and the inheritance chain starts with the object class), or an error occurs. If you change to the following form:
Copy Code code as follows:
Class Foo:
def hi (self):
print ' Hi,foo '
Class Foo2 (Foo):
def hi (self):
Super (Foo2, self). Hi ()
if __name__ = = ' __main__ ':
Foo2 = Foo2 ()
Foo2.hi ()
The run times are wrong as follows:
Copy Code code as follows:
......
Typeerror:must is type, not classobj
For super, see Http://docs.python.org/2/library/functions.html?highlight=super#super and Super.doc.
Class variables and instance variables
The class variable is defined after the class is defined, and the instance variable is assumed to start with the self. For example:
Copy Code code as follows:
Class Foo (object):
val = 0
def __init__ (self):
Self.val = 1
if __name__ = = ' __main__ ':
foo = foo ()
Print Foo.val
Print Foo.val
The results of the operation are:
Copy Code code as follows:
Instances can also access class variables, as follows:
Copy Code code as follows:
Class Foo (object):
val = 0
def __init__ (self):
Pass
if __name__ = = ' __main__ ':
foo = foo ()
Print Foo.val
Print Foo.val
The results of the operation are as follows:
Copy Code code as follows:
In addition, class variables can be accessed in the following ways:
Copy Code code as follows:
Class Foo (object):
val = 3
def __init__ (self):
Print Self.__class__.val
if __name__ = = ' __main__ ':
foo = foo ()
Run Result:
Copy Code code as follows:
You can also do this:
Copy Code code as follows:
Class Foo (object):
val = 3
def __init__ (self):
Pass
@classmethod
def Echo (CLS):
Print Cls.val
if __name__ = = ' __main__ ':
Foo.echo ()
Run Result:
Copy Code code as follows:
Vi. how to invoke the constructor of the parent class
Subclasses (derived classes) do not automatically invoke the Init method of the parent class (the base class), for example:
Copy Code code as follows:
Class Foo (object):
def __init__ (self):
Self.val = 1
Class Foo2 (Foo):
def __init__ (self):
Print Self.val
if __name__ = = ' __main__ ':
Foo2 = Foo2 ()
Run times wrong.
There are two types of init methods that invoke the parent class, the first of which:
Copy Code code as follows:
Class Foo (object):
def __init__ (self):
Self.val = 1
Class Foo2 (Foo):
def __init__ (self):
Foo.__init__ (self)
Print Self.val
if __name__ = = ' __main__ ':
Foo2 = Foo2 ()
The second type:
Copy Code code as follows:
Class Foo (object):
def __init__ (self):
Self.val = 1
Class Foo2 (Foo):
def __init__ (self):
Super (Foo2,self). __init__ ()
Print Self.val
if __name__ = = ' __main__ ':
Foo2 = Foo2 ()
Both of these methods run the following results:
Copy Code code as follows:
But there is a difference between the two methods.