一 polymorphism /ˌpɒlɪˈmɔːfɪz(ə)m/ 多态
Polymorphism is taken from the Greek words Poly (many) and morphism (forms). It means that the same function name can be used for different types. This makes programming more intuitive /ɪnˈtjuːɪtɪv/ 直觉的 and easier.
Polymorphism with Inheritance
Polymorphism in python defines methods in the child class that have the same name as the methods in the parent class. In inheritance, the child class inherits the methods from the parent class. Also, it is possible to modify a method in a child class that it has inherited from the parent class.
This is mostly used in cases where the method inherited from the parent class doesn’t fit the child class. This process of re-implementing a method in the child class is known as Method Overriding方法覆盖.
Duck Typing
Duck typing is a concept related to dynamic typing, where the type or the class of an object is less important than the methods it defines. When you use duck typing, you do not check types at all. Instead, you check for the presence of a given method or attribute.
二 Python Operator Overloading 面向对象高级
You can change the meaning of an operator in Python depending upon the operands used.
Python Special Functions
Class functions that begin with double underscore __
are called special functions in Python.
These functions are not the typical functions that we define for a class. The __init__()
function we defined above is one of them. It gets called every time we create a new object of that class.
There are numerous other special functions in Python.
Overloading Arithmetic Operators
Operator | Expression | Internally |
---|---|---|
Addition | p1 + p2 |
p1.__add__(p2) |
Subtraction | p1 - p2 |
p1.__sub__(p2) |
Multiplication | p1 * p2 |
p1.__mul__(p2) |
Power | p1 ** p2 |
p1.__pow__(p2) |
Division | p1 / p2 |
p1.__truediv__(p2) |
Floor Division | p1 // p2 |
p1.__floordiv__(p2) |
Remainder (modulo) | p1 % p2 |
p1.__mod__(p2) |
Bitwise Left Shift | p1 << p2 |
p1.__lshift__(p2) |
Bitwise Right Shift | p1 >> p2 |
p1.__rshift__(p2) |
Bitwise AND | p1 & p2 |
p1.__and__(p2) |
Bitwise OR | p1 | p2 |
p1.__or__(p2) |
Bitwise XOR | p1 ^ p2 |
p1.__xor__(p2) |
Bitwise NOT | ~p1 |
p1.__invert__() |
Overloading Comparison Operators
Operator | Expression | Internally |
---|---|---|
Less than | p1 < p2 |
p1.__lt__(p2) |
Less than or equal to | p1 <= p2 |
p1.__le__(p2) |
Equal to | p1 == p2 |
p1.__eq__(p2) |
Not equal to | p1 != p2 |
p1.__ne__(p2) |
Greater than | p1 > p2 |
p1.__gt__(p2) |
Greater than or equal to | p1 >= p2 |
p1.__ge__(p2) |
三 Reflection 反射
Reflection refers to the ability for code to be able to examine attributes about objects that might be passed as parameters to a function. For example, if we write type(obj) then Python will return an object which represents the type of obj.
Using reflection, we can write one recursive reverse function that will work for strings, lists, and any other sequence that supports slicing and concatenation. If an obj is a reference to a string, then Python will return the str type object. Further, if we write str() we get a string which is the empty string. In other words, writing str() is the same thing as writing “”. Likewise, writing list() is the same thing as writing [].
https://www.geeksforgeeks.org/reflection-in-python/
四 Exception Handling 异常处理
When an error occurs, or exception as we call it, Python will normally stop and generate an error message.
These exceptions can be handled using the try statement:
The try
block will generate an exception, because x
is not defined:
try:
print(x)
except:
print("An exception occurred")
Since the try block raises an error, the except block will be executed.
Without the try block, the program will crash and raise an error
Many Exceptions
You can define as many exception blocks as you want
Else
You can use the else
keyword to define a block of code to be executed if no errors were raised:
Finally
The finally block, if specified, will be executed regardless if the try block raises an error or not.
This can be useful to close objects and clean up resources:
try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")
Raise an exception
As a Python developer you can choose to throw an exception if a condition occurs.
To throw (or raise) an exception, use the raise keyword.
x = -1
if x < 0:
raise Exception("Sorry, no numbers below zero")
The raise keyword is used to raise an exception.
You can define what kind of error to raise, and the text to print to the user.
x = "hello"
if not type(x) is int:
raise TypeError("Only integers are allowed")