尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【Python基础】面向对象编程使用详解

【Python基础】面向对象编程使用详解 目录一、前言二、类与对象介绍2.1 面向过程与面向对象2.2 面向对象技术简介2.3 什么是类和对象2.3.1 类定义与创建2.3.2 创建对象2.3.3 类对象补充2.4 类的实例方法2.5 魔法方法2.6 类与实例属性三、异常3.1 什么是异常3.2 异常解决办法四、写在文末一、前言面向对象开发是很多编程语言中很成熟的编程思想基于面向对象做开发可以让程序的可维护性更好在Python编程语言中也存在面向对象编程思想的广泛使用本篇将详细介绍下面向对象的使用。二、类与对象介绍2.1 面向过程与面向对象在正式学习面向对象之前有必要了解下面向过程什么是面向过程呢核心思想把一个需求分解成一系列要执行的步骤然后按照步骤依次执行这些任务(关注的是流程、步骤)。适用场景面向过程编程非常直接适合简单、线性的任务。面向对象对象可以理解为现实中具体的人/物在程序中的数字化身(万物皆对象)它把一个人/物的特征和功能打包到一起是面向对象编程的基本单元。(关注的是谁来帮我做这件事儿)下面这张图形象的解释了什么是面向对象2.2 面向对象技术简介和其它编程语言相比Python 在尽可能不增加新的语法和语义的情况下加入了类机制。类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法类中定义的函数。类变量类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员类变量或者实例变量用于处理类及其实例对象的相关的数据。方法重写如果从父类继承的方法不能满足子类的需求可以对其进行改写这个过程叫方法的覆盖override也称为方法的重写。局部变量定义在方法中的变量只作用于当前实例的类。实例变量在类的声明中属性是用变量来表示的这种变量就称为实例变量实例变量就是一个用 self 修饰的变量。继承即一个派生类derived class继承基类base class的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如有这样一个设计一个Dog类型的对象派生自Animal类这是模拟是一个is-a关系例图Dog是一个Animal。实例化创建一个类的实例类的具体对象。对象通过类定义的数据结构实例。对象包括两个数据成员类变量和实例变量和方法。Python中的类提供了面向对象编程的所有基本功能类的继承机制允许多个基类派生类可以覆盖基类中的任何方法方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。2.3 什么是类和对象在 Python 中类和对象是面向对象编程的两大基石类Class可以理解为一张 “蓝图” 或 “模具”。它定义了一类事物共有的属性数据和行为方法但本身不占用具体的内存空间。比如“汽车”就是一个类它描述了所有汽车都有轮子、方向盘并且都能行驶。对象Object是根据类这个蓝图创建出来的具体 “实例”。它实实在在地存在于内存中。比如根据“汽车”这个类可以创建出“一辆红色的宝马车”和“一辆黑色的奔驰车”它们就是具体的对象拥有各自独立的颜色和品牌。用一句话总结就是先有类后有对象类是抽象的对象是具体的。类:描述的是一组具有相同属性(特征)和方法(功能/行为)的模板。对象:对象是类的实例是基于类创建出来的(实例对象)。注意对象是由类创建出来的创建对象的过程也称为对象的实例化。一个类可以创建无数个对象。下面这张图形象的描述了类与对象的关系2.3.1 类定义与创建使用class关键字来定义一个类。约定类名通常使用大驼峰命名法类的定义模板类名的命名规范遵循大驼峰命名法每个单词的首字母都是大写单词之间没有分隔符比如:UserInfoUserAccount__dict__ 是Python中用户自定义类实例的一个特殊属性用于以字典形式存储对象的属性如下定义一个MyClass类class Dog: 这是一个类的文档字符串描述这个类的作用 # 类属性属于整个类所有实例共享 species Canis familiaris # 初始化方法构造方法在创建对象时自动调用用于初始化对象的属性 def __init__(self, name, age): # 实例属性属于具体的对象每个对象可以有不同的值 self.name name self.age age # 实例方法定义对象的行为 def bark(self): # self 指的是调用该方法的对象本身 return f{self.name} says Woof! def get_info(self): return fName: {self.name}, Age: {self.age}, Species: {self.species}代码要点说明init是 Python 的特殊方法魔法方法用于初始化新创建的对象self是方法的第一个参数代表当前实例本身。通过self可以访问该实例的属性2.3.2 创建对象创建对象的过程就是类的实例化过程类实例化后可以使用其属性实际上创建一个类之后可以通过类名访问其属性。定义在类的外面的称之为函数定义在类中的函数称之为方法# 创建了两个不同的 Dog 对象 dog1 Dog(小白, 3) dog2 Dog(小黑, 5) # 访问对象的属性和方法 print(dog1.name) # 输出小白 print(dog2.bark()) # 输出小黑 says Woof! print(dog1.get_info()) # 输出Name: 小白, Age: 3, Species: Canis familiaris2.3.3 类对象补充类对象支持两种操作属性引用和实例化。属性引用使用和 Python 中所有的属性引用一样的标准语法obj.name。类对象创建后类命名空间中所有的命名都是有效属性名。所以如果类定义是这样class MyClass: 一个简单的类实例 i 12345 def f(self): return hello world # 实例化类 x MyClass() # 访问类的属性和方法 print(MyClass 类的属性 i 为, x.i) print(MyClass 类的方法 f 输出为, x.f())以上创建了一个新的类实例并将该对象赋给局部变量 xx 为空的对象。执行以上程序输出结果为MyClass 类的属性 i 为 12345MyClass 类的方法 f 输出为 hello world类有一个名为 init() 的特殊方法构造方法该方法在类实例化时会自动调用像下面这样def __init__(self): self.data []类定义了init() 方法类的实例化操作会自动调用init() 方法。如下实例化类 MyClass对应的init() 方法就会被调用:x MyClass()当然init() 方法可以有参数参数通过init() 传递到类的实例化操作上。例如:class Complex: def __init__(self, realpart, imagpart): self.r realpart self.i imagpart x Complex(3.0, -4.5) print(x.r, x.i) # 输出结果3.0 -4.5self 代表类的实例而非类类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 selfclass Test: def prt(self): print(self) print(self.__class__) t Test() t.prt()以上实例执行结果为main.Test instance at 0x100771878 main.Test从执行结果可以很明显的看出self 代表的是类的实例代表当前对象的地址而 self.class 则指向类。self 不是 python 关键字我们把他换成 runoob 也是可以正常执行的class Test: def prt(runoob): print(runoob) print(runoob.__class__) t Test() t.prt()以上实例执行结果为__main__.Test instance at 0x100771878 __main__.Test在 Python中self 是一个惯用的名称用于表示类的实例对象自身。它是一个指向实例的引用使得类的方法能够访问和操作实例的属性。当你定义一个类并在类中定义方法时第一个参数通常被命名为 self尽管你可以使用其他名称但强烈建议使用 self以保持代码的一致性和可读性。class MyClass: def __init__(self, value): self.value value def display_value(self): print(self.value) # 创建一个类的实例 obj MyClass(42) # 调用实例的方法 obj.display_value() # 输出 42在上面的例子中self 是一个指向类实例的引用它在init构造函数中用于初始化实例的属性也在display_value方法中用于访问实例的属性。通过使用 self你可以在类的方法中访问和操作实例的属性从而实现类的行为。2.4 类的实例方法在类中定义实例方法时定义语法与之前学习的函数定义的方式是一致的下面是一个类中定义定法并进行实例化调用的完整过程下面是完整的示例代码class Car: def __init__(self, color,brand, name,price): self.color color self.brand brand self.name name self.price price print(Car类型的对象初始化完毕对象属性已经添加完毕.) # 定义示例方法 def running(self): print(f{self.brand} {self.name} 正在高速行驶) def total_price(self,discount,rate): 计算提车的总费用包含两个部分:车的价格税费 :param discount: :param rate: :return: total_cost self.price * discount rate * self.price return total_cost c1 Car(红色,BMW,X7,800000) c1.running() res c1.total_price(discount0.8,rate0.1) print(res)运行结果如下2.5 魔法方法魔法方法是指Python中提供的以双下划线开头和结尾的特殊方法用于定义类的特殊行为比如__init__魔法方法是不需要我们手动调用的Python会在合适的时机自动调用下图给出了常用的魔法方法基于上面的类的示例代码增加几个魔法方法如下代码2.6 类与实例属性属性一般分为类的属性和实例属性类属性类属性是属于类本身的属性所有实例共享的。(所有对象共享的数据或配置)实例属性实例属性属于每个具体对象的属性每个对象都是独立的。(各个对象特有的数据)下面这张图完整说明了两者之间的联系通过实例查找属性时会先查找实例属性实例属性不存在时再查找类属性下面是具体的示例代码class Car: # 类属性(所有实例对象共享的) wheel 4 # 轮胎数量 tax_rate 0.1 # 购置税税率 def __init__(self, color,brand, name,price): self.color color self.brand brand self.name name self.price price self.wheel12 print(Car类型的对象初始化完毕对象属性已经添加完毕.) # 定义示例方法 def running(self): print(f{self.brand} {self.name} 正在高速行驶) def total_price(self,discount,rate): 计算提车的总费用包含两个部分:车的价格税费 :param discount: :param rate: :return: total_cost self.price * discount rate * self.price return total_cost c1 Car(红色,BMW,X7,800000) print(c1) print(c1.wheel)三、异常3.1 什么是异常异常(也称为Bug)就是程序运行过程中出现的错误它会中断程序的正常执行流程。保证数据、逻辑的正确性避免程序执行混乱在开发阶段尽量发现更多的问题尽早解决问题保障程序正常执行比如在日常开发中会遇到很多类型的异常下面列出了一些常见的异常类型3.2 异常解决办法程序运行过程中出现异常有两种处理方案不做处理:整个程序因为一个Bug中断执行。(之前编程的程序)捕获异常:按照我们自己的处理方式处理完异常程序继续执行。(编写程序时做好预案出现异常按预案处理)下面是程序处理异常时的完整流程下面看一个具体的示例try: print(--------------------------) print(my_name) print(1/0) print(--------------------------) except NameError as e: print(程序运行出错了异常信息,e) except ZeroDivisionError as e: print(程序运行出错了0不能做除数异常信息, e) except Exception as e: print(e) finally: print(资源释放)四、写在文末本文详细介绍了Python 中面向对象的编程使用希望对看到的同学有用本篇到此结束感谢观看。
返回列表