当前位置: 首页 > article >正文

【第二部分--Python之基础】05 类与对象

1 面向对象

类和对象都是面向对象中的重要概念。面向对象是一种编程思想,即按照真实世界的思维方式构建软件系统。

2 定义类

Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。

定义小汽车(Car)类的代码如下:

小汽车(Car)类继承了object类,object类是所有类的根类,在Python中任何一个类(除object外)都直接或间接地继承了object,直接继承object时(object)部分的代码可以省略。

3 创建对象

类相当于一个模板,依据这样的模板来创建对象,就是类的实例化,所以对象也被称为“实例”。

### 创建对象
class Car(object):
    # 类体
    pass

# 创建一个小汽车对象,小括号表示调用构造方法,构造方法用于初始化对象
car = Car()

4 类的成员

成员变量也被称为数据成员,保存了类或对象的数据。例如,学生的姓名和学号。
构造方法是一种特殊的函数,用于初始化类的成员变量。
成员方法是在类中定义的函数。
属性是对类进行封装而提供的特殊方法。

4.1 实例变量

实例变量就是对象个体特有的“数据”,例如狗狗的名称和年龄等。

init __()方法是构造方法,构造方法用来初始化实例变量。注意,init的前后是两个下画线

4.2 构造方法

类中的__init__()方法是一个非常特殊的方法,用来创建和初始化实例变量,这种方法就是“构造方法”。在定义__init__()方法时,它的第1个参数应该是self,之后的参数用来初始化实例变量。调用构造方法时不需要传入self参数。

构造方法的示例代码如下:

4.3 实例方法

实例方法与实例变量一样,都是某个实例(或对象)个体特有的方法。

定义实例方法时,它的第1个参数也应该是self,这会将当前实例与该方法绑定起来,这也说明该方法属于实例。在调用方法时不需要传入self,类似于构造方法。

下面看一个定义实例方法的示例:

4.4 类变量

类变量是属于类的变量,不属于单个对象。
例如,有一个Account(银行账户)类,它有三个成员变量:amount(账户金额)、interest_rate (利率)和owner(账户名)。amount和owner对于每一个账户都是不同的,而interest_rate对于所有账户都是相同的。amount和owners是实例变量,interest_rate是所有账户实例共享的变量,它属于类,被称为“类变量”。

类变量的示例代码如下:

4.5 类方法

类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第1个参数不是self,而是类本身。

注意:类方法可以访问类变量和其他类方法,但不能访问其他实例方法和实例变量。在以上示例中,cls.interest _rate用于访问Account类变量interest rate。如果在类方法interest_by(中添加访问实例变量的owner语句,则会发生错误。

5 封装性

封装性是面向对象重要的基本特性之一。封装隐藏了对象的内部细节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变得简单。

5.1 私有变量

为了防止外部调用者随意存取类的内部数据(成员变量),内部数据(成员变量)会被封装为“私有变量”。外部调用者只能通过方法调用私有变量。

在默认情况下,Python中的变量是公有的,可以在类的外部访问它们。如果想让它们成为私有变量,则在变量前加上双下画线(__)即可。

由于在类的外部不可以访问私有变量,因此上述代码在运行时会发生错误。

5.2 私有方法

私有方法与私有变量的封装是类似的,在方法前加上双下画线(__)就是私有方法了。

由于在类的外部不可以访问私有方法,因此上述代码在运行时会发生错误。

5.3 使用属性

为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该被设计为私有的,然后通过公有的set (赋值)和get(取值)方法访问。

使用set和get方法进行封装,示例代码如下:

使用属性方式修改上面的示例,代码如下:

6 继承性

继承性也是面向对象重要的基本特性之一

在面向对象中动物是一般类,被称为“父类”;猫是特殊类,被称为“子类”。特殊类拥有一般类的全部数据和操作,可称之为子类继承父类。

6.1 Python中的继承

在Python中声明子类继承父类,语法很简单,定义类时在类的后面使用一对小括号指定它的父类就可以了。

6.2 多继承

在Python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变量,从左到右继承级别从高到低。

6.3 方法重写

如果子类的方法名与父类的方法名相同,则在这种情况下,子类的方法会重写(Override)父类的同名方法。

7 多态性

多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现出多种形态。

例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是叫的方式不同,动的方式也不同。

7.1 继承与多态

在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法。

7.2 鸭子类型测试与多态

Python的多态性更加灵活,支持鸭子类型测试。鸭子类型测试指:若看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟可以被称为鸭子。

由于支持鸭子类型测试,所以Python解释器不检查发生多态的对象是否继承了同一个父类,只要它们有相同的行为(方法),它们之间就是多态的。
例如,我们设计一个函数start(),它接收具有“叫”speak()方法的对象,代码如下:

我们定义了几个类,它们都有speak()方法。代码如下:

start()函数可以接收所有speak()方法对象,代码如下:


http://www.kler.cn/a/468802.html

相关文章:

  • F#语言的网络编程
  • 力扣第137题:只出现一次的数字 II C语言解法
  • Unity性能优化总结
  • 四种线程池的创建及任务提交
  • 3 抢红包系统
  • 力扣--34.在排序数组中查找元素的第一个和最后一个位置
  • 详细讲一下Canvas标签的基础使用和应用场景
  • 集成方案:基于慧集通的某客户多系统间集成简略方案(致远OA、NCC高级版、三方物业系统、发票税务系统等)
  • 模拟出一个三维表面生成表面点,计算体积,并处理边界点
  • 系统架构师考试-CBSE基于构件的软件工程
  • 前端开发语言涉及到 的注解(Annotations)
  • vue3 vite 使用 代理转发
  • 阿赵的MaxScript学习笔记分享十六《MaxScript和WinForm交互》
  • 【Python系列】Python 中的 `enumerate` 函数及其应用
  • 基于区块链的共享算力系统概念方案
  • Django Admin 以管理 AWS Lambda 函数
  • 深度信念网络 (Deep Belief Network, DBN) 算法详解与PyTorch实现
  • 性能测试04|JMeter:连接数据库、逻辑控制器、定时器
  • Linux中操作中的无痕命令history技巧
  • Sonic:开源Go语言开发的高性能博客平台
  • 第五届神经网络、信息与通信工程国际学术会议(NNICE 2025)
  • Java与AI:构建智能应用的强大组合
  • git使用指南-实践-搭建git私服
  • 【最新版】智慧小区物业管理小程序源码+uniapp全开源
  • 【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等
  • 操作系统大题整理