文章目录
一、面向对象
1. 面向对象概述
- 概述
面向对象编程 —— Object Oriented Programming
简写 OOP
面向对象编程的思想主要是针对大型 软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭 积木一样简单。
Python 中,一切皆对象。
注:Python 支持面向过程、面向对象、函数式编程等多种编程范式。
- 面向对象三大特性
- 封装
- 根据 职责 将 属性 和 方法 封装 到一个抽象的
类 中
- 根据 职责 将 属性 和 方法 封装 到一个抽象的
- 继承
- 实现代码的重用,相同的代码不需要重复的编写
- 多态
- 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
- 面向对象和面向过程的区别
- 面向过程(Procedure Oriented):注重的是问题解决的过程
- 程更加关注的是“程序的逻辑流程”,是一种“执行者”思维
- 适合编写小 规模的程序
- 面向对象:注重的是谁去做这个事
- 关注的是“软件中对象之间的关系”,是一种“设计者”思维
- 适合编写 大规模的程序。
- 宏观上使用面向对象把握,微观处理上仍然是面向过程。
- 对象的进化(从面向过程到面向对象)
随着编程面临的问题越来越复杂,编程语言本身也在进化,从主要处理简单数据开始, 随着数据变多进化“数组”; 数据类型变复杂,进化出了“结构体”; 处理数据的方式和逻辑变复杂,进化出了“对象”。
- 简单数据:像 30,40,50.4 等这些数字,可以看做是简单数据。最初的计算机编程,都是像这样的数字。
- 数组:将同类型的数据放到一起。
- 比如:整数数组[20,30,40],浮点数数组[10.2, 11.3, 12.4], 字符串数组:[“aa”,”bb”,”cc”]
- 结构体:将不同类型的数据放到一起,是C语言中的数据结构
struct resume{
int age;
char name[10];
double salary;
};
- 对象:将不同类型的数据、方法(即函数)放到一起,就是对象。
class Student:
company = "SXT" #类属性
count = 0 #类属性
def __init__(self,name,score):
self.name = name #实例属性
self.score = score
Student.count = Student.count+1
def say_score(self): #实例方法
print("我的公司是:",Student.company)
print(self.name,'的分数是:',self.score)
二、类和对象
1. 类和对象
- 概述
- 类:是对是对一群具有 相同 特征 或者 行为
的事物的属性和行为的统称,或者说抽象,不能直接使用- 属性:是什么(对应类里的
属性
) - 行为:能做什么(对应类里的
方法
) - 类 就相当于制造飞机时的图纸,是一个 模板,是
负责创建对象的
- 属性:是什么(对应类里的
类不能具体的表示一个真实存在的事物.
- 对象:是类的一种实例表示,是 由类创建出来的一个具体存在,可以直接使用
- 是真实存在的,看得见摸得到的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OuDgfnQn-1610804910831)(Media/image-20210105220030595.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3Xaxb63-1610804910835)(Media/image-20210105220202513.png)]
- 类与对象的关系
-
类就是创建对象的模板
-
类 只有一个,而 对象 可以有很多个
- 不同的对象 之间 属性 可能会各不相同
-
类 中定义了什么 属性和方法,对象
中就有什么属性和方法,不可能多,也不可能少 -
Python 中,“一切皆对象”。类也称为“类对象”
-
类的实例也称为“实例对象”。
- Python的对象
一个 Python 对象包含三个部分:
- id(identity 识别码)
- type(对象类型)
- value(对象的值)。
我们可以更进一步的说,一个 Python 对象包含如下部分:
- id(identity 识别码)
- type(对象类型)
- value(对象的值)
- 属性(attribute)
- 方法(method)
2. 类Class
- 类的构成
类(Class) 由3个部分构成
- 类的名称:类名,满足大驼峰命名法
- 类的属性:具有什么样的特征
- 类的方法:允许对进行操作的方法 (行为)
- 类的定义格式
经典类(Python2.X,Python3.X)
class 类名:
属性
行为
class 类名():
属性
行为
新式类:(Python3.X)
class 类名(object):
属性
方法
在 python3 以后,只有新式类
class Cat(object):
name = "Tom" # 属性
def eat(self): # 方法
print('吃')
注意:
-
上述三种格式都可以使用,推荐使用新式类的方式书写
-
方法和函数的区别在于:方法括号内多了一个
self
self
代表实例对象本身,指向了这个实例对象- 可以将self换为其他变量,但一般不会用其他变量
-
object是Python里所有类的最顶级父类
-
类名命名规则按照大驼峰命名法
3. 对象Object
1. 创建对象
对象名 = 类名(参数列表....)
- 创建对象:即实例化,实例一个对象
- 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,然后将这个地址引用返回给对象名
- 实例对象时,调用了
__new__()
函数
2. 使用对象的格式
对象调用方法的格式:
对象名.方法名(参数列表)
注意:
- 方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
- 默认会将当前调用方法的对象引用传递进去
3. 创建多个对象
- 如果通过同一个类,创建多次对象时,多次创建的对象是类型相同,但地址不同的多个对象
4. 实例对象和类对象创建过程(内存分析)
class Student:
company = "尚学堂" #类属性
count = 0 #类属性
def __init__(self,name,score):
self.name = name #实例属性
self.score = score
Student.count = Student.count+1
def say_score(self): #实例方法
print("我的公司是:",Student.company)
print(self.name,'的分数是:',self.score)
s1 = Student('高淇',80) #s1 是实例对象,自动调用__init__()方法
s1.say_score()
print('一共创建{0}个 Student 对象'.format(Student.count))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LE9XwK7g-1610804910838)(Media/image-20210105222347066.png)]
注意,实例方法是加载在类对象里的,实例对象引用了类对象中的实例方法