1. 主页
  2. Python基础到高级
  3. 面向对象
  4. 基本概述

基本概述

面向对象的概述

面向对象是一种编程范式

范式可以定义为是一组方法论

编程范式就是一组如何组织代码的方法论

主流的编程范式:

  • PP: 面向过程(C)
  • IP: 面向指令(汇编)
  • FP: 函数式编程(无副作用)
  • LP: 面向逻辑的编程(把世界抽象为:与或非,prolog)
  • OOP:面向对象的编程(Python)
  • AOP:面向方面的编程(Python中的装饰器,sql语言)

Python属于OOP,所以主要介绍OOP编程

OOP的世界观:

  • OOP的世界是由对象组成的
  • 对象具有运动规律和内部状态
  • 对象之间是可以相互作用的

OOP是目前人类的认知中,最接近真实世界的编程范式

OOP的特点:

  • 唯一性:对象都是唯一的,不会存在两个相同的对象,除非他们是同一个对象
  • 分类性:对象是可分类的,根据作用和特性,区分类别和子类别

OOP的三大特征:

  • 封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  • 继承:使用其他类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
  • 多态性:将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

Python的面向对象编程

提到面向对象,就要说下,class关键字了, 在现在所有的面向对象的编程语言中,基本上都有class这个关键字,class关键字是和面向对象息息相关的,但是在现在也有一些语言,已经开始不使用class关键字,但是它也是面向对象的编程语言,例如GO语言

使用命名元组,可以让我们更好的组织数据,让数据更规范,让字段有名字

In [1]: from collections import namedtuple

In [2]: Pet = namedtuple('Pet',['name', 'age'])

In [3]: person = Pet('lanyulei',18)

In [4]: person.name
Out[4]: 'lanyulei'

In [5]: person.age
Out[5]: 18

类的定义

使用class关键字定义一个类,例如定义一个门的类,有门牌号和门的状态

In [1]: class Door:
   ...:     def __init__(self, number, status):
   ...:         self.number = number
   ...:         self.status = status
   ...:         

In [2]: door = Door(1001,  'closed')

In [3]: door.number
Out[3]: 1001

In [4]: door.status
Out[4]: 'closed'

现在门的状态是关闭的,我们直接修改类的属性进行改变门的状态

In [5]: door.status = 'openning'   # 这样门的状态就打开了

In [6]: door.status
Out[6]: 'openning'

通过上面的例子, 可以总结出:

  • 创建类对象的时候使用类名(init 函数除第一个参数外的参数列表)
  • 创建对象的时候,实际上是执行了__init__函数,这样的函数,也叫作构造函数

上面的例子中,在实例化类对象的时候,给类传递了两个参数,但是明显的 __init__函数是有三个参数的

这里就说下self

在类的__init__函数中, 第一个参数都是代表的类实例本身的

  • init 本身是不会创建对象的
  • init 函数会初始化对象

一个类的对象的创建过程

  • 首先创建对象
  • 然后对象作为self传递给__init__的第一个参数
  • 然后返回self

这里声明,self只是一种Python编程中惯用的写法,self可以是任何字母组成的字符串来表示

定义一个类,在类中的函数,当第一个参数是self的时候,则这种函数可以叫做类的方法

In [7]: class Door:
   ...:     def __init__(self, number, status):
   ...:         self.number = number
   ...:         self.status = status
   ...:     def open(self):   # 开门方法 
   ...:         self.status = 'openning'
   ...:     def close(self):  # 关门方法
   ...:         self.status = 'closed'
   ...:             

In [8]: door = Door(1001, 'openning')

In [9]: door.status
Out[9]: 'openning'

In [11]: door.close()   # 当我们执行指定的方法的时候,就会调用方法中的代码块,并且,第一个参数会自动传入为对象本身

In [12]: door.status
Out[12]: 'closed'

注意self只能是位置参数,不能是其他类型的参数

上面的将的大概是围绕着这四个方面介绍的

  • 如何定义类
  • 如何创建对象并初始化对象
  • 如何定义方法
  • 方法调用

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注