Python neutron class to invoke a method of the parent class, which was implemented in earlier versions of Python:
Class A:
def __init__ (self):
Print "Enter A"
Print "Leave A"
Class B (A):
def __init__ (self):
Print "Enter B"
A.__init__ (self)
Print "Leave B"
b = B ()
>>>enter B
Enter A
Leave A
Leave B
is to use a non-binding class method (a method referenced with the class name), and in the argument list, introduce the object to be bound (self) to achieve the purpose of calling the parent class.
The disadvantage of this is that when the parent class of a subclass changes (such as when the parent class of Class B is changed from A to C), the entire class definition must be traversed, replacing all the class names of the unbound methods, such as code Snippet 2,
Code Snippet 2:
Class B (c): # A--C
def __init__ (self):
Print "Enter B"
C.__init__ (self) # A--C
Print "Leave B"
If the code is simple, this change might be acceptable. But if the amount of code is large, such a modification could be catastrophic. It is easy to cause modification errors to occur.
In the post-python2.3 version, a keyword called super was added to solve this problem, but if you want to use the Super function to invoke the parent class method must have a premise, the function of the parent class must be a new class (that is, the class inherits the object Class)!! Otherwise, the Super keyword cannot be used!!!
Class A (object): # A is a new class!
def __init__ (self):
Print "Enter A"
Print "Leave A"
Class B (c): # A--C
def __init__ (self):
Print "Enter B"
Super (B, self). __init__ ()
Print "Leave B"
Try to execute the same code above, the result is consistent, but only one place to modify the code, to minimize the maintenance of the code, is a good use. So in our development process, the Super keyword is heavily used and has been performing well.
How to use the Super keyword:
Super (' Parent ' of the class to invoke, self). The method of this class parent class.
Here's an anatomy of the Super Keyword principle:
1.super is not a function, it is a class name, like Super (B, self) actually called the Super class initialization function, resulting in a Super object.
The Super object, instantiated by the 2.super class, does nothing else but records the type of the class and the specific object.
The multi-inheritance class of 3.Python ensures that functions of each parent class are called one at a time by means of MRO, and that each parent class function is called only once (if each class uses Super).
An example of a use of the Super function:
Inherit the Dict class and make an ordered dictionary type based on the Dict class.
Class Mydict (dict): #有序字典实现
def __init__ (self):
Self.li = []
Super (Mydict,self). __init__ ()
def __setitem__ (self, Key,value): #__setitem__ (self,key,value): Sets the value of the given key
Self.li.append (Key)
Super (Mydict,self) __setitem__ (Key,value)
def __str__ (self): How to implement #__str__ direct print objects
Temp_list = []
For key in Self.li:
Value = Self.get (key)
Temp_list.append ("'%s ':%s"% (Key,value,))
Temp_str = ' {' + ', '. Join (Temp_list) + '} '
Return TEMP_STR
obj = Mydict ()
obj[' k1 '] = 123
obj[' K2 '] = 456
Print (obj)
This article is from the "Rebirth" blog, make sure to keep this source http://suhaozhi.blog.51cto.com/7272298/1913200
8.python Face Object Part.5 (the subclass calls the method of the parent class, and the Super keyword)