python面向对象编程

Python 面向对象

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。
接下来我们先来简单的了解下面向对象的一些基本特征。


面向过程编程与面向对象编程的区别?

  • 面向过程:—侧重于怎么做?

    1.把完成某一个需求的 所有步骤 从头到尾 逐步实现
    2.根据开发要求,将某些功能独立的代码封装成一个又一个函数
    3.最后完成的代码,就是顺序的调用不同的函数
    特点:
    1.注重步骤与过程,不注重职责分工
    2.如果需求复杂,代码会变得很复杂
    3.开发复杂项目,没有固定的套路,开发难度很大

  • 面向对象:–谁来做?

    相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
    1.在完成某一个需求前,首先确定职责–要做的事(方法)
    2.根据职责确定不同的对象,在对象内部封装不同的方法(多个)
    3.最后完成代码,就是顺序的让不同的对象调用不同的方法
    特点:
    1.注重对象和职责,不同的对象承担不同的职责
    2.更加适合对复杂的需求变化,是专门应对复杂项目的开发,提供的固定套路
    3.需要在面向过程的基础上,再学习一些面向对象的语法


面向对象技术简介

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
实例

这里写图片描述

面向对象三大特性

  1. 封装:根据职责将属性和方法封装到一个抽象的类中定义类的准则
  2. 继承:实现代码的重用,相同的代码不需要重复的编写,子类针对自己特有的需求,编写特定的代码
  3. 多态:不同的子类(这是之前提到的继承的知识)对象调用相同的方法,产生不同的执行结果
类的继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。

在python中继承中的一些特点:
  1. 如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
  2. 在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数
  3. Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
实例

这里写图片描述

(1, 1, 1)子类调用父类的类属性
(1, 2, 1)第二个:子类类属性覆盖父类类属性
(3, 2, 3)父类类属性重新赋值,第三个:子类调用父类类属性

方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

这里写图片描述

多继承

一个子类可以同时继承多个父类,当父类有相同的函数时,先继承的父类方法生效

这里写图片描述

python中经典类和新式类的区别?

  • 经典类不继承object类
  • 新式类继承object类,继承object的方法

这里写图片描述

基础重载方法

下表列出了一些通用的功能,你可以在自己的类重写:

序号方法, 描述简单的调用
1init ( self [,args…] ) 构造函数简单的调用方法: obj = className(args)
2del( self )析构方法, 删除一个对象简单的调用方法 : del obj
3repr( self )转化为供解释器读取的形式简单的调用方法 : repr(obj)
4str( self )用于将值转化为适于人阅读的形式简单的调用方法 : str(obj)
5cmp ( self, x )对象比较
类属性与方法
类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods

这里写图片描述

多态

  • 不同的子类(这是之前提到的继承的知识)对象调用相同的方法,产生不同的执行结果

这里写图片描述

单例设计模式

让类创建的对象,在系统中只有唯一的一个实例

这里写图片描述

desc:

使用类名()创建对象时,python的解释器首先会调用new方法为对象分配空间
new是一个由object基类提供的内置的静态方法,主要有两个作用:

  • 在内存中为对象分配空间
  • 返回对象的引用

python的解释器获得对象的引用后,将引用作为第一个参数,传递给init方法
new:负责给对象分配空间 init(初始化方法)负责给对象初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值