2.16 类与对象
2.16.1 面向对象的编程和面向过程的编程
学习之前,我们需要了解什么是“面对对象的编程”。
定义:面向对象编程是一种以对象为中心的编程思想,它在软件设计、数据库设计、网络结构设计、人工智能算法等领域有着非常广泛的应用。
与之相对的是:面向过程的编程。
定义:是一种以过程为中心的编程思想。都是以什么正在发生为主要目标进行编程。
这里你会发现一头雾水,不知所云。我们举个简单的例子来说明两者的区别:
这要从编程语言发展说起:
C,fortran等较早的高级语言因为应用环境简单,系统规模较小采取的是面向过程的思路。
面向过程的编程:总体来说你首先思考的是该干什么,关键字是动词。比如我要起床、刷牙,吃饭,然后上班。重点是聚焦于我们要做什么事情,强调过程。
之后随着系统复杂性提高,C++,java等高级语言,采取了面向对象的思路。
总体来说就是思考由谁去干,关键字是名词。比如我的生活。然后我具有一些属性,比如能够睡觉,能够清洁,需要饮食,需要工作。之后去调用。我.起床,我.刷牙。
比如python语法里面你会经常看到一些变量名.方法
,比如我们之前学过的增加append函数:
movie = [‘无问西东’,’肖申克的救赎’,’霸王别姬’]
movie.append(‘假如爱有天意’)
print(movie)
这里movie就是我们说的对象,后面点append是方法(函数只是实现方法的一种工具,服务于方法)
这样来看,面向对象比面向过程简单太多了。因为面向对象是让谁来做,具体怎么完成那是那个人的事,跟我们没关系,我们可以调用方法函数辅助完成。面向过程是怎么做,即一件事我们要完成,怎么完成,方法是什么?
我们今天着重讲面向对象的编程。
简单来讲:
对象 = 属性 + 方法
我们描述一个人(对象),可以从外貌(静态的属性)和行为(动态的方法)来描述,
python里面类的名字通常以大写字母开头。
我们很早接触的类,是数据类型。下面我们可以尝试一下结果:
print(type('1')) # '1'属于字符串类'str'
print(type(1)) # 1属于整数类'int'
print(type([1])) # [1]属于列表类'list'
实例的概念:在Python的术语里,我们把类的个例就叫做实例 (instance),可理解为“实际的例子”。
2.16.2 没有对象又找不到怎么办?那就创建一个
2.16.2.1 类的创建
我和你,都是中国人——这句话里隐藏着一个共识:我们都属于中国人这个类,所以我们(作为实例)存在一些共同点。例如:黑眼睛、黄皮肤、用筷子吃饭、会讲汉语……
而这些共同点,就是我们区别于其他类的依据,细分的话其实可以分成两种。
第一种是描述事物是怎样的,有什么特征,比如黑眼睛、黄皮肤。
第二种是描述事物能做什么,有哪些行为和作用,比如能用筷子吃饭、会讲汉语。
上面我们已经说过:对象 = 属性 + 方法
第一种就是属性,第二种就是方法。
我们举个例子:
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
另外我们写函数(方法)的时候,括号里一定留一个self。具体原因就是:self指的是类实例对象本身(注意:不是类本身)。即你要实现你写的实例。
self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。
定义self