面向对象编程的三个基本特征是:封装,继承,多态。下面就python来理解一下这三个特征。
1.封装
从表面上看,对象封装了对象的属性和方法,使之成为一个独立性很强的模块。
另外,封装可以看作一个屏障,一种信息隐蔽技术,防止该类被其他类任意访问,必须通过指定的方式对该类进行访问,增加了代码的安全性。
从生活中的例子看,开车的人并不需要明白汽车的工作原理,汽车的工作原理对用户封装起来,用户只需要通过方向盘,油门等等指定的方法操纵汽车即可。
从python的例子看,例如列表list是python的一个序列对象,我们对列表里的数据进行排序等操作,我们直接是调用list.sort()方法来操作的。可以看出 python的列表就是一个对象,它提供了若干种方法让我们对列表进行操作,但我们不知道列表对象里有哪些变量和方法,这就是封装的思想。
2.继承和多态
个人认为,继承和多态应该放在一起来理解
继承是指子类自动共享父类之间的数据和方法的机制,子类继承父类的方法,并作出自己的改变和扩展。比如在学习pytorch写神经网络是,model都是继承的torch.nn.Module。
class Animal(object): ##父类
def run(self):
print ('Animal is running')
class Dog(Animal): ##子类继承父类
def eat(self): ##子类扩展自己的方法
print('Animal is eatting')
dog = Dog() ##实例
dog.run() ##子类调用父类方法
继承可以一级一级继承下来,如下图,而任何类,归根结底,都可以归于继承根类object。
继承的意义,不仅仅是在于为了少写代码,更大的作用,在于实现多态。一句话概括,多态是指,不同的类对同一方法响应不同的行动,子类对父类方法的重写。
关于面向对象和面向过程的理解,先放一篇博客,日后再细细整理。
面向对象的三大特征是?能不能用通俗的语言进行解释?
继承和多态 廖雪峰
如何通俗易懂地举例说明「面向对象」和「面向过程」有什么区别?