python面向对象编程的三大特性_Python-面向对象编程

wKioL1mtG3-ywtKQAAGEahqgupI072.png

一.编程范式

1.面向过程编程

面向过程把函数继续切分为子函数,来降低系统的复杂度。初学者容易接受,从上往下依次执行。

2.面向对象编程(OOP) Object Oriented Programming 对函数进行分类和封装....

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

3.面向函数编程(lisp)

将某功能的代码封装为一个函数,使用时仅调用函数。

(2+3)*2-1 jian(multi(add(2,3),2),1)

二.基础概念

1.类:在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)。

OOP首选思考的不是程序的执行流程,而是某个数据类型应该被视为一个对象,这个对象拥有的属性(Property)。

2.object表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。

class people: 经典类

class People(object): 新式类,object类是所有类的基类/父类

3.实例(Instance)则是一个个具体的 Student;

面向对象的抽象程度又比函数要高,因为一个 Class 既包含数据,又包含操作数据的方法。

- 创建实例的方式:student1 = Student()

- 可以自由地给实例变量绑定属性,student1.name,student1.score;

4.构造函数

def __init__(self,name,age): 构造函数,当实例化对象时自动调用

5.属性 self.name = name

6.方法: 给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。

Class 是一种抽象概念,比如我们定义的 Class——Student,是指学生这个概念;

__init__ 方法的第一个参数永远是 self ,表示创建的实例本身;

- 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self ,并且调用时,不用传递该参数。

- 可定义一个特殊的 __init__ 方法,在创建实例的时候,就把name , score等属性绑上去。

7.析构函数

删除实例化对象时自动调用;

def __del__(self):

print "deleteing......"

8.子类

class Student(People): Student是子类,继承People这个父类;

注:以上例子见下面数据封装的图示

三.面向对象的三个特性

1.数据封装

封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);

- 访问封装内容的两种方式:

通过self去访问封装的内容;(self.name)

通过实例化的对象名去访问封装的内容;

wKiom1mumFOCheLgAADmIyeyLT8335.png

wKioL1mumDahsAPRAAAwI-RdvYM722.png

练习:练习1:

创建一个类People,拥有的方法为砍柴,娶媳妇,回家;

实例化对象,执行相应的方法

显示如下:

老李,18岁,男,开车去娶媳妇

校思浩,22岁,男,上山去砍柴

唐浩,10岁,男,辍学回家

属性:name,age,gender

方法:goHome(), kanChai(),quXiFu()

wKiom1ms4MfQvrznAADtYOL-U-k891.png

wKioL1ms4KvCtkyuAAAaPrU87oY180.png

wKiom1ms4OTS6Rc4AABEIO1Ug1I827.png

2.继承

继承性:子承父业,继承遗产.对于面向对象的继承来讲,就是将多个类共有的方法提取到父类中去,而子类只需要继承

父类的方法,不需要一一实现每个方法;

1.几个概念:子类(派生类)和父类(基类),经典类和新式类

class D(object): 新式类

class D: 经典类

(1)继承属性的第一种方法,不推荐

如果父类名更改,此处也需要更改

wKiom1mum86BfgRRAAEY0nFoHFE166.png

(2)继承属性的第一种方法super,推荐

wKioL1mum7HjA_aYAAEG4tA1Pvw296.png

2.多继承

- python的类可以继承多个,Java和C#只能单继承;

- 继承多个类,有两种算法:深度优先算法和广度优先算法;

- 类为经典类(class C:)时,多继承时使用深度优先算法;

- 类为新式类(class C(C1,C2))时,多继承时使用广度优先算法;

eg: D, C(D), B(D), A(B,C)

深度优先:A->B->D->C

广度优先: A->B->C->D

3. 注意:类的方法中可以传递一个对象

(1)新式类(优先同级) 优先在C类中找

wKioL1ms45rzThsdAADMO-Ff_uo034.png

(2)新式类(优先同级) 优先在C类中找,C中没有再去D类中找

wKiom1ms47bDwglTAADNLAacFYY474.png

(3)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找

wKiom1ms47bTuHRqAADAxkZlgxY105.png

(4)经典类(优先上级) 优先在B类中找,B中没有再去B类的上级D类中找,D类没有最后在到同级的C类中找

wKioL1ms45uggRyKAAC9dByRf3g760.png

3.多态

就是多种表现形态的意思。它是一种机制、一种能力,而非某个关键字。它在类的继承中得以实现,在类的方法调用中得以体现。多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式。

- 如果子类调用的方法,子类没有,父类有,运行父类;

- 如果子类调用的方法,子类有,父类也有,只运行子类的;

wKioL1ms5YPiDH_cAAFEqnG944Y145.png

四.将两个子类做关联

wKioL1munMOC5M3uAAC7dV5Ddmw866.png

wKiom1munOHTpMrwAAB6S0sQut0401.png

wKioL1munMOyr_1CAACMVnkHhyQ984.png

wKiom1munOGhpWypAABErqinahA434.png

五.访问限制

在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private);

当self.__age变为私有变量,等于_People__age _People__age = self.__agewKioL1mupYLihoH_AACC_P4t-b0654.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值