写在前面
类的这个概念在显示生活中很容易找到生动的例子。
比如说,在数学中,数字分为整数、小数、复数这三种类型。不同类型的数据运算方法是不同的。这与计算机中的基本类型是很相似的。因此,不要把类想的遥不可及,归根结底类就是对一类具有相同属性和行为的对象进行分类的结果。
在面向对象编程时,这种概念便被借用了。我们可以通过类,定义我们自己的数据类型,并赋予其相应的属性和方法。
class Person:
def __init__(self, name, age):
self.name = name
self.age =age
def work(self):
print(self.name, 'working')
def walk(self):
print(self.name, 'walking')
xiaoMing = Person('小明', 20)
xiaoFang = Person('小芳', 22)
xiaoMing.work()
xiaoFang.work()
但是我们会遇到这样的问题。当我们用xiaoMing.work()的时候,Python是怎么知道是xiaoMing在调用呢?关键点就在于self。xiaoMing调用时,将xiaoMing这个的地址赋值给了self,那么self便指向了当前调用对象。同样地,对于xiaoFang来讲也是同样的道理。因此,我们得出结论:Python中的self在调用过程中指向当前调用对象。
多态是减少代码重复性和明晰程序逻辑的非常有用的方法。一般情况下,实现多态的方法有两种,override(重写)和overload(重载)。
Python | Python中没有重载overload,因为python中的函数形参个数是变化的。 | Python中的override,在继承中子类的方法可以覆盖父类的方法 |
C++ | C++中有重载,重载函数的函数名相同,函数形参的个数或类型不同 | C++中通过虚函数(虚表)来实现override |
Java | Java中有重载,与C++相同 | Java中override,与Python中的重写相同。 |