面向过程:根据业务逻辑从上到下写代码。
面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑。
面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。
面向对象(object-oriented ;简称: OO)至今还没有统一的概念 我这里把它定义为:按人们 认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。 这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
面向对象的三大特征:封装、继承、多态
封装
封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些OOP语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
1、实现对类的定义
定义一个类Car,并创建两个对象BMW和benz。
如果我们创建多个对象时,都向上图一样一次次为属性赋值比较麻烦,下面调用方法缩减工作量。
观察如下代码:
使用__init__()方法可以在创建对象时为对象的属性赋值。
def __init__(self,参数,...):
赋值
__init__()方法在创建一个对象时默认被调用,不需要手动调用。
Self参数不需要开发者传递,python解释器会自动把当前的对象引用传递进去。
BMW1也指向BMW所指向的地址。所以,给BMW1.name赋值以后,该地址内所存储的信息发生了变化,输出也就跟着变了。
使用id()查看内存地址
在对象转成字符串的时候调用__str__(self):这个方法,并将此方法的返回值返回,所以该方法必须有返回值return,并且返回的是一个字符串。
在python中如果方法名是__xxxx__(),那么就有特殊的功能,因此叫做“魔法”方法。当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据(如上图结果)。
可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思。某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。