面向对象编程

本文探讨了高阶函数的概念及其在编程中的应用,并详细介绍了面向过程、面向对象及函数式编程三种主要编程范式的特点。此外还深入讨论了Python中面向对象编程的核心概念,如类、对象、继承与多态等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高阶函数

函数实质是一个变量,fun -> 内存空间;   func1 = fun; func1()
高阶函数:可以接受函数作为参数,或者把函数作为返回值的函数;

一.编程范式


1.面向过程编程

面向过程把函数继续切分为子函数,来降低系统的复杂度。


2.面向对象编程(OOP) Object Oriented Programming

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


3.面向函数编程(lisp)

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。


二.基础概念


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

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


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

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


3.实例(Instance)则是一个个具体的 Student;
面向对象的抽象程度又比函数要高,因为一个 Class 既包含数据,又包含操作数据的方法。


4.object表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用 object 类,这是所有类最终都会继承的类。
- 创建实例的方式:student1 = Student()
- 可以自由地给实例变量绑定属性,student1.name,student1.score;
- 可定义一个特殊的 __init__ 方法,在创建实例的时候,就把name , score等属性绑上去


5. __init__ 方法的第一个参数永远是 self ,表示创建的实例本身;
- 在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self ,并且调用时,不用传递该参数。


三.数据封装
1.数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
2.封装的另一个好处是可以给类增加新的方法;


封装性:将内容封装到某个地方,以后再去调用被封装在某处的数据

  1. 将内容封装到某处

  2. 从某处调用被封装的内容

对于面向对象的封装来说,就是使用构造方法将内容封装到对象里面,然后通过对象直接调用或者self调用被封装的数据

例:

wKiom1ms39qyJvZLAACglCMDbaM602.png


练习:

练习1:

wKiom1ms4MfQvrznAADtYOL-U-k891.png

wKioL1ms4KvCtkyuAAAaPrU87oY180.png


wKiom1ms4OTS6Rc4AABEIO1Ug1I827.png


四.访问限制
1.在 Python 中,实例的变量名如果以 __ 开头,就变成了一个私有变量(private);
2.双下划线开头的实例变量是不是一定不能从外部访问呢?NO



五.继承和多态
- 对于 Dog 来说,Animal 就是它的父类,对于 Animal 来说,Dog 就是它的子类;
- 继承最大的好处是子类获得了父类的全部功能。
- 继承的另一个好处:多态。子类的覆盖了父类的方法。

继承性:子承父业,继承遗产.对于面向对象的继承来讲,就是将多个类共有的方法提取到父类中去,而子类只需要继承
父类的方法,不需要一一实现每个方法;
几个概念:子类(派生类)和父类(基类),经典类和新式类
1. 多继承
      - 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

class A(object):  新式类

class A:                   经典类


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



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



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




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



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


wKioL1ms5YPiDH_cAAFEqnG944Y145.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值