本节内容
- 面向对象编程介绍
- 为什么用面向对象进行开发
- 面向对象的特性:封装,继承,多态
- 类,属性,方法,构造函数,析构函数
- 类变量,实例变量
面向对象编程介绍
- 编程范式(面向对象,过程,函数式编程)
面向过程


面向对象 OOP

面向对象的几个核心特性
-
Class 类
一个类 即对一类拥有相同属性的对象的抽象,蓝图,原型。在类中定义了这些对象的都具备的属性(variables(data)),共同的方法。 -
Object 对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性。 -
Encapsulation 封装
在类中对数据的赋值,内部调用对外部用户是透明的,这使类变成了一个容器,里面包含着类的数据和方法 -
Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承 -
Polymorphism 多态
”一个接口,多种实现“
一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法进行了不同的实现,这就是 同一种事物表现出的多种形态。

1 构造函数及其原理


2 实例变量

总结:
变量 就是 静态属性
方法 就是 动态属性
ps:
1 若已经实例化为一个对象之后,去给属性赋值,则结果更新
2 若赋值属性不是类中构造函数的参数 ,赋值之后仍然可以调用
主要 因为 构造函数的原理 传入实例引用 之后属性赋值就相当于具体实例的属性赋值 和原始类无关

结果:

3 类变量
-
在 2 的函数中加入类变量

结果

总结
d1 其实相当于新增了一个实例属性 打印时直接打印该值
d2 打印时发现实例没有此属性 只能找类变量 并输出该值
当后续更改类变量的值时 d1 没有影响 d2 随之改变 -
同理,加入类变量 n_list


结果

总结
发现这两个调用的是一个list 因为留存的是地址 指向原有的list
4 析构函数
在实例释放,销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,打开的临时文件
-
生成两个对象 执行各自程序之后 删除

结果

-
生成两个对象 执行完一个对象之后立即del

结果

总结
实例对象不主动删除则仍然存在
默认是执行完程序之后析构函数自动删除
若想早些删除 则del +对象名
5 私有方法/属性
-
私有属性 变量名前加__ (两个_)

-
在公开方法内部调用私有属性 ok

-
若不通过方法,直接想要打印私有属性 not ok

结果

-
私有方法 方法名前加__ (两个_)

结果 not ok

5 类的继承
-
常规示例


结果

-
更高级的写法
super( 子类,self).init(在父类初始化函数中的参数)

用super()的好处在于一旦父类名改变,用到父类的子类方法无需随之更新,便于代码的修改和维护 -
多继承
子类

两个父类

执行1

结果1

总结
多继承 先继承左边的 再右边 -
经典类和新式类的继承顺序
以A,B,C,D为例:


结果
D 有自己的def init(self) 则执行
若无 则先左边的初始化函数------左无-------右边的初始化----均无----往上一层的类的初始化函数
D—>B---->C---->A
这一规律也称为 “广度优先”原则
总结
而在python 2中经典类 class X: 是“深度优先”原则
在此例中应该为 D—>B---->A
新式类 class XXX(object): 按照“广度优先”原则
D---->B----->C----->A
在python 3中均是广度优先原则 -
多继承实例(学校,学校的人)
建立四个类




测试

结果

-
阶段性总结
-
继承:
可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 -
实现继承:
通过“继承”Inheritance 和“组合”Composition 来实现 -
继承概念的实现方式有3类
实现继承 使用基类的属性和方法而无需额外编码的能力
接口继承 仅使用属性和方法的名称,但是子类必须提供实现的能力
可视继承 子窗体(类)使用基窗体(类)的外观和实现代码的能力 -
OOP开发范式
划分对象—>抽象类---->将类组织成为层次化结构(继承和合成)—>用类与实例进行设计与实现几个阶段
6 多态
-
一个接口 多种实现
-
定义:
多态性是 允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作。简洁说,允许将子类类型的指针赋值给父类类型的指针。 -
作用:
封装可以隐藏实现细节,使得代码模块化
继承可以扩展已存在的代码模块
以上两者目的都是为了-----代码重用
多态----实现另一个目的----接口重用
作用:为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一个属性时的正确调用。 -
例子



本文介绍了Python的面向对象编程,包括类的构造函数、实例变量、类变量、析构函数、私有方法/属性、类的继承和多态。详细阐述了封装、继承和多态的核心概念,并通过示例代码演示了它们的工作原理和使用方法。
1180

被折叠的 条评论
为什么被折叠?



