”测试开发全日制学徒班7期第10天“-pythone面向对象编程
-
pythone面向对象编程
-
面向过程编程
-
简介
-
面向过程编程(Procedural Programming)是一种基于过程或函数的编程范式。 它将程序视为一系列的顺序执行的过程或函数,每个过程或函数完成特定的任务,通过调用其他过程或函数来协同工作。 在面向过程编程中,数据和函数(过程)是分离的,函数可以直接访问和操作数据。
-
-
特点
-
强调任务和步骤:面向过程编程将程序划分为一系列的任务或步骤,这些任务按照顺序执行,以完成特定的功能。
-
数据与函数分离:在面向过程编程中,数据和函数(过程)是分离的,函数在需要时对数据进行操作。
-
直接操作数据:函数在执行过程中可以直接访问和操作数据,这样可能会导致数据在多个地方被访问和修改,增加了代码的复杂性和维护的困难。
-
代码复用:通过将常用的代码片段封装成函数,实现代码的复用。
-
执行效率:由于没有面向对象编程中的对象创建、继承和多态等机制,面向过程编程通常可以更高效地执行。
-
-
-
面向对象编程
-
简介
-
面向对象编程(Object-Oriented Programming,OOP)是一种基于对象的编程范式。 它将程序视为一组相互作用的对象,每个对象都有自己的属性(数据)和方法(行为)。 通过对象之间的交互和消息传递,来完成任务和解决问题。
-
-
特点
-
封装性(Encapsulation):将数据和对数据的操作封装在对象中,仅向外部暴露必要的接口,隐藏了内部的实现细节。
-
继承性(Inheritance):通过继承机制,可以从已存在的类派生出新的类,新类自动获得了父类的属性和方法,并可以在此基础上进行扩展和修改。
-
多态性(Polymorphism):同一种类型的对象在不同的上下文中可以有不同的行为,即在不同的情况下可以使用相同的接口来实现不同的功能。
-
类与对象:类是对象的模板,描述了对象的属性和方法。对象是类的实例,通过类创建的实例可以访问和操作该类定义的属性和方法。
-
信息传递:面向对象编程通过消息传递的方式实现对象之间的交互和通信。
-
-
-
类和对象
-
类与对象的概念
-
什么是类
-
简介
-
在面向对象编程中,类 Class 是一种定义现实事物属性和方法的蓝图或模板。类描述了现实事物的特征 属性 和行为 方法。它定义了一类具有相似特征和行为的事物的通用结构和行为。
-
-
类的组成
-
类由属性和方法组成。属性是类的特征,用于描述类的状态。方法是定义在类中的函数,用于描述类的行为和操作。通过使用类,我们可以创建多个具有相同属性和方法的对象。类中的属性和方法是相对独立的,每个对象都有自己的属性副本,但共享类中的方法。
-
-
-
什么是对象
-
简介
-
在面向对象编程中,对象(Object)是类的一个实例。对象是具体存在的,具有状态和行为的实体。可以把类看作是对象的模板或蓝图,描述了对象应该具有的属性和方法。当我们通过类创建一个具体的实例时,这个实例就是一个对象。
-
-
特征
-
状态:对象的状态由它的属性决定,属性表示了对象的特点和特征。例如,一个人对象的状态可以包括姓名、年龄、性别等属性,这些属性的值可以根据对象的实际情况而不同。
-
行为:对象的行为由它的方法决定,方法表示了对象能够执行的操作和行为。例如,一个人对象的行为可以包括走路、说话、工作等方法,通过调用这些方法可以让对象执行相应的行为。
-
-
-
总结
-
对象是类的实例,可以根据类的定义创建多个对象。每个对象都有自己的属性值,在相同的类下,不同的对象可以具有不同的状态和行为。
-
通过对象,我们可以对数据进行封装和操作,通过对象之间的交互和消息传递,实现程序的逻辑和功能。
-
对象是具体的实体,具有属性和方法。它是类的一个实例,通过类定义可以创建多个对象。
-
-
-
类的定义
-
python中使用class关键字来创建一个类,class之后为类的名称,python中所有类都是由根类(object)类派生而来。
-
格式:class 类名: pass # 或 class 类名(object): pass
![image]()
-
-
实例对象
-
一个类定义好了,还不能使用,类只是规定了该类型的数据具有什么特征和行为,而真正要去使用这些特征和行为,必须有一个真实的列表存在。实例对象本质上就是使用自定义类型去声明一个变量。
-
格式
-
实例对象名 = 类名()
![image]()
-
-
实例对象调用类中的方法
![image]()
-
-
-
实例属性
-
动态绑定属性
-
Python 中的属性变量都是使用动态绑定的方式绑定到实例对象上的。
-
格式:实例对象名.实例属性名
![image]()
-
在使用动态绑定属性时,给哪个实例对象绑定的属性,哪个对象才会拥有属性变量,没有绑定的则没有。
![image]()
-
动态绑定形式为对象添加属性,但是属性在实例对象之后添加的,所以这个属性只能在该绑定的对象上使用,其他未绑定的对象无法使用。
![image]()
-
-
-
构造方法
-
构造方法:"__init__(self)"方法
-
简介
-
构造方法__init__(self) 方法,来给实例对象初始化属性,在实例对象时自动调用。
-
-
示例
-
构造方法__init__(self)方法的使用
![image]()
-
-
-
对象描述方法:"__str__(self)"方法
-
简介
-
构造方法__str__(self)方法,在实例对象后,如果直接打印对象,输出该对象的相关信息,发现实际输出的并不是想要的结果。而是该实例对象的类型和地址。如果想在输出实例对象时,按指定的格式输出,需要实现 __str__(self) 方法,该方法不接收除 self 以外的参数,self 参数自动传入,函数只能返回一个字符串。
-
-
示例
-
未使用构造方法__str__(self)方法时,实例对象的输出只会输出实例对象的类型与地址
![image]()
-
使用构造方法__str__(self)方法时,就可以来自定义打印对象时显示的内容
![image]()
-
-
-
self
-
简介
-
self 是一个特殊的关键字,用来表示当前被实例的对象,可以理解为人称代词我。通过 self 可以定义或访问实例对象的属性或方法
-
-
格式
-
self.属性名 = 属性值
-
-
-
-
练习:定义一个商品类,包含 商品名称 和 商品价格 两个属性,实现商品类的对象描述方法。定义一个购物车类,包含一个 商品列表属性 和 添加商品 及 显示所有商品两个方法。
-
练习代码
![image]()
-
运行结果
![image]()
-
-
实例方法
-
简介
-
实例方法用来定义对象的行为。实例方法本质上就是定义在类中的函数。实例方法默认携带一个参数 self, 在程序执行时,由解释器自动传入调用该方法的实例对象,通过此参数,可以在当前实例方法中调用其它实例方法或属性。
-
-
格式
-
def 方法名(self): pass # 或 def 方法名(self,参数1,参数2...): pass
-
-
示例代码
-
代码
![image]()
-
对应运行结果
![image]()
-
-
-
-
类属性
-
简介
-
在类中定属性时,属性名有 self 前缀的是实例属性,而在类中直接定义的属性即为类属性。类属性其实就是作用于类中的变量
-
-
特征
-
在类中直接定义的变量为类属性
-
在方法中使用类属性时,需要使用类名做为前缀,即:类名.类属性名
-
在类的外部可以通过类名或实例对象名访问类属性
-
所有的实例对象名共享一个类属性
-
实例对象只能获取类属性的值,不能直接进行修改,只能通过方法进行修改或通过类名.类属性名来修改类属性值。
-
-
示例代码
-
代码1
![image]()
-
运行结果
![image]()
-
-
代码2
![image]()
-
运行结果2
![image]()
-
-
-
-
类方法
-
类方法的定义
-
类方法在定义时,需要使用 @classmethod 装饰器进行修饰,来定义类方法。而类方法的默认参数为 cls, 该参数也是在使用时,由解释器自动传入的,但传入的对象不是实例对象,而是类对象。
![image]()
-
-
类方法的使用
-
通过类名.类方法名来使用类方法
![image]()
-
-
类方法的作用
-
一般类方法用来封装工具类使用,将一些复杂的代码逻辑封装成类方法,由类名直接调用,不需要实例对象,比如时间处理,网络请求处理等。
-
-
注意
-
如果类中既定义了实例属性,又定义了类方法,那么在类方法中是不能使用实例属性的,因为在使用类方法的过程中,实例对象不存在,所以不能使用实例属性。
-
-
封装一个日期时间获取的工具类
-
代码
![image]()
-
运行结果
![image]()
-
-
-
-
练习:创建一个 Python 类,包含以下内容: 1、一个类属性,表示该类的计数器(如创建的对象数量)。 2、一个类方法,用于访问和更新类属性。 3、使用类方法实现对类属性的修改和访问。 4、创建几个类对象,测试类属性和类方法的功能。
-
练习代码
![image]()
-
运行结果
![image]()
-
-
静态方法
-
定义
-
静态方法在定义时,需要使用 @staticmethod 装饰器进行装饰,与类方法不同的是,静态方法没有默认参数。静态方法和普通的函数本质上是一样的,只是定义在了类中。
![image]()
-
-
使用
-
直接使用类名.静态方法名来进行调用
![image]()
-
使用对象.静态方法名进行调用
![image]()
-
-
-



























浙公网安备 33010602011771号