本系列内容所用Python版本为anaconda,直接浏览器搜索下载安装即可!


前面内容我有多次提到过对象这个概念,今天我想专门出一期内容,浅谈一下Python的对象这一基础概念,并谈谈我对面向对象编程这一编程思想的理解,希望对后续内容的学习能起到一点帮助。

一、Python对象

简单来说对象就是具体的实例。像字符串'lcm',当他被创建的时候,他就是一个字符串对象,是实际存在的,并不是抽象的

那么对象是怎么来的

首先要搞明白用于描述对象特征的数据信息称为该对象的属性,而存取属性的函数叫做方法,是该对象与外界沟通的接口,具有相同属性和方法的对象构成类,换言之类是对象抽象化而形成的概念,而对象则是类的具体实例,例如股票对象贵州茅台就是股票这个类的具体实例,面向对象编程有三大特征:封装、继承、多态

1.创建对象

搞清楚了对象是类的实例后,就明白想要创建对象先要有类,创建类的代码形式同函数一样,由class关键字打头,随后是类的名称以及继承类的名称,并以冒号(:)结尾,以下是类的一般创建形式

python基础面向对象(Python基础之对象面向对象编程)(1)

括号表示继承自哪一类,如果没有则填object,这是所有类继承的源头

有了类之后就可以创建具体的实例对象了

python基础面向对象(Python基础之对象面向对象编程)(2)

我们创建了一个对象asset1,它来自于Asset类

Python可以动态绑定实例对象的属性

python基础面向对象(Python基础之对象面向对象编程)(3)

就这样我们给对象asset2、asset3分别绑定了名字和价格属性

以上案例演示了源自同一类的不同实例,藉由动态绑定的方法拥有不同属性,虽然方便,但有悖于把类视为实体的模板之惯例,若我们希望创建自同一个类的实例拥有一些共同特征,可以藉由定义一个特殊的__init__方法,来绑定一些在创建实例时必不可少的属性。

python基础面向对象(Python基础之对象面向对象编程)(4)

我们创建了一个Asset类,它有名字和价格两个属性,创建具体实例时必须传入这两个属性

2.封装

若要打印出具体对像的某个属性,可以创建一个打印函数

python基础面向对象(Python基础之对象面向对象编程)(5)

以下是示例

python基础面向对象(Python基础之对象面向对象编程)(6)

但是price属于asset4这个对象的内部属性,从软件设计的角度考量,有些属性可能带有重要信息,像上例轻松从外部函数直接访问内部属性,并不好,比较理想的方法是把属性和访问属性的方法放在同一个对象当中

python基础面向对象(Python基础之对象面向对象编程)(7)

在类中定义的方法可以用“实例.方法”的方式直接调用

python基础面向对象(Python基础之对象面向对象编程)(8)

把方法写在对象内部仍然无法阻止对象属性被轻易获取,因为“对象.属性名”依然可以打印出对象的属性,为了对对象的属性提供更加安全的保障,我们在创建对象实例时,在对象属性名字前面加上两个下划线,以表示这个属性为private(私有的)属性,这样通过“对象.属性名”就无法访问,只能通过内部方法访问

python基础面向对象(Python基础之对象面向对象编程)(9)

给Asset对象的价格属性加密

python基础面向对象(Python基础之对象面向对象编程)(10)

通过“对象.属性”访问对象的price属性时报错,因为这个属性加密了,而访问name属性时则不报错

相较于直接从外部访问对象的属性,这种把访问方法封装在对象的内部的好处是,它可以赋予方法一些规范,例如如果想要修改对象的属性,可以直接把修改方法写在对象内部

3.继承

继承的思想是在已有的类的基础上,尽可能的多重复去利用它。原有的类称为父类,根据父类衍生出来的类称为子类,一个父类可以衍生出无数个子类,换言之父类是由所有子类抽象而来的,子类一旦继承父类便拥有了父类的属性和方法,并可以视情况增添修改

下面我们创建新的类,他继承自上面的Asset

python基础面向对象(Python基础之对象面向对象编程)(11)

子类Asset1增加了修改价格方法

4.多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性

二、面向对象编程

面向对象编程是相对于面向过程编程而言的,我的理解是,Python面向对象编程是通过不同的方法作用于不同的对象,通过对对象的一系列操作实现目的编程思想

好了,就到这里。今天的内容简单向大家介绍了一下Python的对象概念,以及面向对象编程的编程思想,非常浅显,但我相信有个基本的了解,对以后的学习肯定是有帮助的。

END

,