Python3(7)Python 面向对象编程

本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。

Python3 (1) Python语言的简介

Python3 (2) Python语法基础

Python3 (3) Python函数

Python3 (4) Python高级特性

Python3(5) Python 函数式编程

Python3(6) Python 模块

Python3(7) Python 面向对象编程

Python3(8) Python 面向对象高级编程

面向对象编程是一种编程思想,主要与面向过程编程比较学习,在经历了 C++、C#、Java 的面向对象的学习,相信学习 Python 的面向对象会让自己对 OOP 有更深的理解。

面向对象与面向过程的比较

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程编程——面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

输出结果:

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。的实例就是一个个对象。

类与实例

类与实例与java相同,就是普通的 Class 和 Class的实例化 ,类可以看成一个模板,可以实例出不用的对象。

下面我们分析一下上面面向对象的 示例:

Student 类的定义,继承自object

含义跟java构造函数相同,创建了实例时可以绑定一些数据。

创建实例 在类名后+ 即可,没有关键字跟 使用一致。

在类中定义的函数有个共同的特点就是第一个参数是。

Python允许对实例变量绑定任何数据,与静态语言不同。

数据封装

数据的封装,其实就是定义一些函数,来实现特定的功能,类的实例调用对应的方法就可以实现对应的功能,不需要关注函数的具体实现和数据的具体传递。

访问限制

在前面我们已经学习过,除特殊的变量,以和命名的变量是私有的,我们可以通过设置get、set来访问私有变量。这就体现了代码的封装性,可以使我们的程序更加的安全,规范,健壮。但是不是设置成私有的就一定不能被外界直接访问只是不符合编码规则,例如:python解释器会编译成不同的版本也可能有不同的编译方式,所以尽量不要这样使用。

继承

OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。继承的作用就是子类可以继承到父类的所有功能。也可以重写对应的功能。

多态

多态的概念其实是在继承,重写的应用,我们可以通过继承派生出不同的子类,重写子类的具体实现,在调用时用他们的共同基类做参数,这样基类派生出的各种子类都可以传递进去,系统会根据传入的具体类型实现具体的功能。

开闭原则

多态的设计采用的就是开闭原则:调用方只管调用,不管细节,不需要任何更改。

1. 对扩展开放:允许新增子类;

2. 对修改封闭:不需要修改用基类作为参数的方法

鸭子类型

这是Python强大之处,决定了继承不像静态语言那样是必须的。

鸭子类型:不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子,具体讲就是传入的对象,有需要的方法就可以传入并使用,不需要严格的来自它的继承。

下面通过一个示例来演示继承、多态、鸭子类型:

输出结果:

获取对象信息

python中内置了各种函数,方便我们获取对象的信息。如、、、、以及

下面是对获取对象信息 内置函数的使用示例:

输出结果:

实例属性和类属性

这里主要强调一下实例属性与类属性的区别,由于Python是动态语言,根据类创建的实例可以任意绑定属性。包括类的属性

输出结果:

从上面可以看出如果删除了实例的属性,实例的属性会自动访问类的属性。所以一定要注意实例的属性名与类的属性名不要重复。

参考

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318645694388f1f10473d7f416e9291616be8367ab5000

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125A0I89900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券