1 面向对象的基本概念
-
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
-
怎么理解面向对象?
面向对象是一种编程思想,就是把要解决的问题抽象成一个一个的类,在类里面定义属性和方法(这个过程叫封装),在使用的时候创建类的对象来调用这些属性和方法,解决具体的问题
-
类class和对象object:
类class:类是抽象的,类具有事物的描述(属性,静态的特征)和操作(方法,动态的特征);比如学生类,它具备的属性有姓名、年龄、身高、体重等,它具备的方法有学习、吃饭、睡觉、打闹等等。
对象object:对象是具体的事物,它具有特定事物的描述和操作,类相当于一个模板,对象就是根据这个模板创建出来的具体个体。
分析以下描述中的类和对象?
我有一部手机,品牌是华为,型号是Mate50 Pro保时捷,颜色是墨蓝瓷,容量是512G,买它花了我15000块钱,这部手机可以打电话,刷抖音,还能吃鸡。
我还有部手机,品牌是小米,型号是xxx
我:对象;
手机:类;
这一部手机:对象;
-
属性
-
品牌:属性;华为:属性的参数(品牌=华为);
-
型号:属性;Mate50 Pro保时捷:属性的参数;
-
颜色:属性;墨蓝瓷是属性对应的值
-
容量:属性;512G是属性对应的值
-
-
方法
-
买:方法;
-
打电话:方法;
-
刷抖音:方法;
-
吃鸡:方法
-
类:手机类 ----------> 创建出来的对象是:这是一部手机
-
属性:品牌、型号、颜色、容量-------------->属性用变量来定义
-
方法:买东西、打电话、刷抖音、吃鸡----------->方法用函数来定义
怎么理解类和对象?类是一类事物的统称,相当于一个模板;对象是类的一个个体,通过类来创建对象,一个类可以创建多个对象
根据类创建出来的对象,也具备类一样的属性和方法,可以根据类去创建多个对象。
如图举例:
-
2 类的声明与实例化
类是对客观世界中事物得抽象描述,而对象是类实例化后的实体。
2.1 类的声明
-
使用class关键字定义一个类,类名一般用大驼峰法表示,做到“见名思意”。比如DemoClass
-
类的声明语法:
class 类名称:类的成员 #包括属性和方法
-
举例:
# 定义一个类 class People:#类的属性:用变量来表示type="高等生物"#类的方法:用函数来表示,但注意方法和函数两个概念有区别def eat(self):return "用筷子吃饭!"
2.2 属性和方法
-
属性和方法统称类的成员。
-
属性:类的静态特征叫属性,比如学生类的姓名、性别、年龄等特征就是静态特征,用变量来表示;
-
方法:类的动态特征叫方法,比如学生类的吃饭、睡觉、吃鸡等特征就是动态特征,用函数来表示;
-
-
举例:
# 定义一个类 class Students():#类的属性:用变量来表示type="学生"#类的方法:用函数来表示,但注意方法和函数两个概念有区别def study(self):return "学习软件测试技术!"
2.3 类的实例化(创建对象)
-
根据类创建对象的过程,就是类的实例化;一个类可以创建多个对象;创建的对象带有类的属性和方法。
-
变量 = 类()
# 定义一个类 class Students:#类的属性:用变量来表示type="学生"#类的方法:用函数来表示,但注意方法和函数两个概念有区别def study(self):return "学习软件测试技术!" #实例化对象 Students() print(id(Students()))#实例化一个对象,并赋值给变量stu1,那么stu1就相当于对象的引用 stu1=Students() print(id(stu1)) print(id(stu1)) #实例化另一个对象 stu2=Students() print(id(stu2))
2.4 属性和方法的调用
-
因为类的对象有类的所有属性和方法,所以可以通过对象来调用类的属性和方法,调用的语法是:
-
对象.属性
-
对象.方法
-
# 定义一个类
class Students():#类的属性:用变量来表示type="学生"#类的方法:用函数来表示,但注意方法和函数两个概念有区别def study(self):return "学习软件测试技术!"
#实例化一个对象
stu1=Students()
#调用属性
print(stu1.type)
#调用方法
print(stu1.study())
2.5 对self的理解
方法中至少有1个参数self,并且self形参必须在第一个位置,但调用方法时又不需要给self参数传参。self表示对象本身,哪个对象调用方法,self就表示哪个对象。
# 定义一个类
class Students():# 类的方法:用函数来表示,但注意方法和函数两个概念有区别def change_type(self,type):# 如下表示调用对象的type属性进行操作,通过self.type实现调用self.type=type# 输出selfprint("self:",self)return self.type
# 实例化一个对象
stu1=Students()
# 调用change_type()方法,此时change_type()方法在执行的时候self对应的就是stu1这个对象
print(stu1.change_type("小学生"))
# 实例化一个对象
stu2=Students()
# 调用change_type()方法,此时change_type()方法在执行的时候self对应的就是stu2这个对象
print(stu2.change_type("中学生"))
# 输出stu2对象,此时可以看到对应的内存地址与self的值一样
print(stu2)
2.6 构造方法和析构方法
魔法方法:在Python中,所有以__
双下划线包起来的方法,都统称为“Magic Method”,中文称『魔术方法』,例如类的初始化方法 __init__
。这里介绍两个魔法方法:__init__()
和__del__()
构造方法:__init__()
-
__init__
是构造方法,在声明类的时候构造方法是可选的(也叫魔法方法——python自带的方法) -
__init__
在类中的作用是:初始化对象 -
当类中没有显式地声明构造方法的时候,系统会使用一个默认的不带参的构造方法来实现对象的创建,当我们需要对对象初始化的时候,就可以显式地声明一个带参(也可以不带参)的构造方法。
析构方法:__del__()
-
__del__()
是析构方法,作用是在一个对象调用完成后,会将对象释放掉,不再使用
# 定义一个类
class Students():# 类的方法:用函数来表示,但注意方法和函数两个概念有区别def change_type(self,type):# 如下表示调用对象的type属性进行操作,通过self.type实现调用self.type=type# 输出selfprint("self:",self)return self.type
# 实例化一个对象
stu1=Students()
# 调用change_type()方法,此时change_type()方法在执行的时候self对应的就是stu1这个对象
print(stu1.change_type("小学生"))
# 实例化一个对象
stu2=Students()
# 调用change_type()方法,此时change_type()方法在执行的时候self对应的就是stu2这个对象
print(stu2.change_type("中学生"))
# 输出stu2对象,此时可以看到对应的内存地址与self的值一样
print(stu2)
2.7 函数与方法的区别
函数和方法的区别:
-
函数定义在类外面,方法定义在类里面;
-
函数通过
函数名(实参)
来调用,方法一般通过对象.方法名(实参)
来执行; -
方法中必须有一个参数(通常命名为self)且这个参数一定在第一个位置,self表示对象本身,方法中的self参数在调用方法时不需要传实参;如果在函数声明时写一个叫self的形参,表示一个叫self的位置参数,在调用函数时必须对它传值。