Python 基础(十四):类和对象

news2025/1/18 6:27:10

在这里插入图片描述

❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬

文章目录

  • 一、面向对象编程
  • 二、创建类
  • 三、创建实例
    • 3.1、访问属性
    • 3.2、调用方法
  • 四、属性默认值
    • 4.1、在初始化方法中指定默认值
    • 4.2、声明属性时指定默认值
  • 五、修改属性值
    • 5.1、直接修改属性的值
    • 5.2、通过方法修改属性的值
  • 六、继承
    • 6.1、创建子类
    • 6.2、定义子类自己的属性和方法
    • 6.3、重写父类的方法
    • 6.4、子类的实例
  • 系列文章
  • 热门专栏


大家好,我是水滴~~

本篇主要讲述 Python 中的类和对象,主要内容有:面向对象编程、创建类、创建实例、属性的默认值、修改属性值、继承等。

一、面向对象编程

在介绍 Python 的类和对象之前,我们先了解一下面向对象编程的概念。那么什么是面向对象编程呢?

面向对象编程(Object Oriented Programming,OOP)是最有效的软件编写方法之一。在面向对象编程中,你可以将现实世界中的任何事务和情景抽象成一个对象(Object),而这个对象可以使用(Class)来表示。例如,现象世界中的人,可以抽象成一个 Person 类。

而对象的一些特征,可以使用类的属性(Property)来表示。例如,人的特征有姓名、性别、年龄等,可以抽象出属性 namesexage

另外对象还可以做一些动作,可以使用类的方法(Method)来表示。例如,人可以跑步、看书、写代码等,可以抽象出方法running()reading()coding()

而根据类来创建一个具体的对象,称为一个实例(Examples),这个创建的过程称为实例化。而一个类可以有无数个实例。

二、创建类

类包含了属性和方法。在 Python 中,使用 class 关键字来声明一个类,使用 __init__() 方法初始化属性值,而定义方法和定义函数一样,也就是说,我们把定义在类中的函数称为方法。

下面定义了一个 Person 类,使用特殊的__init__() 方法来初始化 namesexage,并定义了三个方法 running()reading()coding()

class Person:
    """
    这是一个 Person 类,
    它有姓名、性别、年龄三个属性,
    它可以跑步、看书、写代码
    """

    def __init__(self, name, sex, age):
        """定义一个初始化方法,用于初始化属性的值"""
        self.name = name
        self.sex = sex
        self.age = age
    
    def running(self):
        """定义一个跑步方法"""
        print(self.name + "正在跑步")

    def reading(self):
        """定义一个看书方法"""
        print(self.name + "正在看书")

    def coding(self):
        """定义一个写代码方法"""
        print(self.name + "正在写代码")

定义类也有很多需要注意的地方:

  • 类名首字母要大写,采用的是大驼峰命名法。
  • 在类中定义的函数称为方法,方法与函数的使用完全相同。
  • __init__()是一个特殊的方法,每次初始化实例时都会自动调用它,用于初始化实例的属性值。
  • 所有的方法都有一个 self 形参,它是必不可少的,并且只有在方法的第一个形参。self 是一个指向实例本身的引用,用于访问实例中的属性和方法。这种通过实例来访问的变量称为属性

三、创建实例

类创建好后,就可以通过类来创建具体的实例了。

创建实例时需要指定类名,由于会自动调用 __init__() 方法,所以需要指定其实参。另外可以根据需要创建任意数量的实例,为每个实例指定不同的实例名即可。

下面例子,创建了一个姓名为“张三”的实例,并将这个实例存在在变量 person 中:

# 创建 Person 的实例,实例名为 person
person = Person("张三", "男", 18)

3.1、访问属性

要访问实例的属性,可以使用句点来访问。下面例子分别访问 person 实例的三个属性,并输出属性值:

# 访问 person 实例的属性,并使用 print 输出属性值
print(person.name)
print(person.sex)
print(person.age)

输出结果:

张三
男
18

3.2、调用方法

要调用实例的方法,同样使用据点来调用(即使方法没有行参,调用时也不要忘记在后面加括号())。下面例子分别调用了 person 实例的三个方法。

# 调用 person 实例的方法
person.running()
person.reading()
person.coding()

输出结果:

张三正在跑步
张三正在看书
张三正在写代码

四、属性默认值

类中的每个属性都必须有初始值,否则将无法访问。对于一些属性,可以指定其默认值。

4.1、在初始化方法中指定默认值

在初始化方法中,可以直接指定默认值,无需行参来指定。

class Person:
    """
    这是一个 Person 类,
    它有姓名、性别、年龄三个属性,
    它可以跑步、看书、写代码
    """

    def __init__(self, name, sex):
        """定义一个初始化方法,用于初始化属性的值"""
        self.name = name
        self.sex = sex
        self.age = 18
    
    ...

4.2、声明属性时指定默认值

在类中,可以直接声明一个属性,并指定其默认值。

class Person:
    """
    这是一个 Person 类,
    它有姓名、性别、年龄三个属性,
    它可以跑步、看书、写代码
    """
    
    age = 18

    def __init__(self, name, sex):
        """定义一个初始化方法,用于初始化属性的值"""
        self.name = name
        self.sex = sex
    
    ...

五、修改属性值

属性的值通过初始化后,是可以修改的,下面列出了两种修改的方法:

5.1、直接修改属性的值

要修改属性的值,最简单的方法是通过实例直接访问它并赋值。

# 创建 Person 的实例,实例名为 person
person = Person("张三", "男")
# 修改 sex 属性值
person.sex = "女"

5.2、通过方法修改属性的值

在类中可以定义一个修改属性值的方法,调用后即可修改属性的值。

    def set_sex(self, sex):
        """定义一个设置性别属性值的方法"""
        self.sex = sex

六、继承

在创建类时,还可以选择继承现有的类,当一个类继承了另一个类时,它将自动获得另一个类的所有属性和方法。被继承者称为父类,继承者称为子类。子类不但拥有父类的所有属性和方法,同时还可以定义自己的属性和方法。

6.1、创建子类

创建子类时,需要在类名后面指定父类名称,并在 __init__() 方法中初始化父类的属性。

下面例子我们创建一个 Woman 子类,该类继承上面例子中的 Person 类:

class Woman(Person):
    """
    这是一个 Woman 类,它继承了 Person 类,
    它具有父类的三个属性,
    它具有父类的三个方法
    """

    def __init__(self, name, age):
        """初始化父类的属性"""
        super().__init__(name, "女", age)

我们创建的 Woman 子类,已经明确知道她的性别为“女”,所以初始化方法中无需指定行参 sex,在初始化父类属性时,将 sex 参数固定为“女”即可。

6.2、定义子类自己的属性和方法

当然子类是可以有自己的属性和方法的。

下面例子中,为 Woman 子类增加了 height 属性和 movies() 方法:

class Woman(Person):
    """
    这是一个 Woman 类,它继承了 Person 类,
    它除了有父类的三个属性,还有自己的属性:身高,
    它除了有父类的三个方法,还有自己的方法:看电影
    """

    def __init__(self, name, age, height):
        """初始化父类的属性"""
        super().__init__(name, "女", age)
        """初始化自己的属性"""
        self.height = height

    def movies(self):
        """定义一个看电影方法"""
        print(self.name + "正在看电影")

6.3、重写父类的方法

当父类的方法不适用于子类时,可以在子类中重写父类的方法。

例如:我们定义的 Woman 子类不会写代码,那么就可以重写父类的 coding() 方法。

class Woman(Person):
    """
    这是一个 Woman 类,它继承了 Person 类,
    它除了有父类的三个属性,还有自己的属性:身高,
    它除了有父类的三个方法,还有自己的方法:看电影
    """

    def __init__(self, name, age, height):
        """初始化父类的属性"""
        super().__init__(name, "女", age)
        """初始化自己的属性"""
        self.height = height

    def movies(self):
        """定义一个看电影方法"""
        print(self.name + "正在看电影")
        
    def coding(self):
        """重写父类的写代码方法"""
        print(self.name + "不会写代码")

6.4、子类的实例

我们在使用子类的实例时并没有特殊的地方,访问其父类的属性和方法的方式,与访问子类的方式完全相同。

下面例子创建了 Woman 的实例,调用了实例的方法,并访问了实例的属性

# 创建 Woman 的实例,并将实例存在到变量 woman 中
woman = Woman("小红", 18, 165)

# 调用 woman 实例的方法
woman.running()
woman.reading()
woman.coding()
woman.movies()

# 访问 woman 实例的属性,并输出
print(woman.name)
print(woman.sex)
print(woman.age)
print(woman.height)

输出结果:

小红正在跑步
小红正在看书
小红不会写代码
小红正在看电影
小红
女
18
165

系列文章

🔥 Python 基础(一):初识 Python
🔥 Python 基础(二):搭建 Python 开发环境
🔥 Python 基础(三):Python 集成开发工具 IDLE
🔥 Python 基础(四):基础语法
🔥 Python 基础(五):变量与常量
🔥 Python 基础(六):基本数据类型
🔥 Python 基础(七):常用运算符
🔥 Python 基础(八):流程控制语句
🔥 Python 基础(九):列表
🔥 Python 基础(十):元组
🔥 Python 基础(十一):集合
🔥 Python 基础(十二):字典
🔥 Python 基础(十三):函数

热门专栏

👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络通信协议-ICMP协议

目录 一、ICMP协议 二、ICMP协议通信过程 (1)机制 (2)原理 (3)相关术语 丢包率 网络延时率(延迟) 请求超时【类似表白对方压根不搭理你】 没有任何回复数据,回复…

DNS/ICMP协议/NAT技术

本博文分享DNS(简单认识)、ICMP(简单认识)和NAT技术(重点学习)。 DNS DNS是一整套从域名映射到IP的系统,TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序。但是IP地址不方便记忆&…

windows下mysql中binlog日志分析和数据恢复

1.首先查看是否开启了binlog show variables like %log_bin%;看到了是没有开启的。 2.开启binlog日志,并重启mysql服务 不能通过命令的方式去打开,因为会提示说这个参数是只读的。如下图: 所以,打开mysql的配置文件&#xff…

Three.js--》实现3d地球模型展示

目录 项目搭建 实现网页简单布局 初始化three.js基础代码 创建环境背景 加载地球模型 实现光柱效果 添加月球模型 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目中才能灵活将所学知识运用起来,话不多…

配置MIT6.S081环境

配置环境 1实现环境2更换源3.安装RISC-V交叉编译工具4.安装QEMU5.检测安装6.下载源码7.检查调试工具8.安装vim9.进行初步调试 1实现环境 虚拟机(我用的VMware Workstation Pro)Ubantu20.04安装QEMU 注意必须使用ubuntu20.04版本,因为后面安装…

Webpack打包图片-JS-Vue

1 Webpack打包图片 2 Webpack打包JS代码 3 Babel和babel-loader 5 resolve模块解析 4 Webpack打包Vue webpack5打包 的过程: 在webpack的配置文件里面编写rules,type类型有多种,每个都有自己的作用,想要把小内存的图片转成bas…

华为OD机试之不含101的整数(Java源码)

不含101的数 题目描述 小明在学习二进制时,发现了一类不含 101的数,也就是: 将数字用二进制表示,不能出现 101 。 现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个二进制不含 101 的整数? 输入描述…

WalkRE--刷图流程(超具体)

1、打开WalkRE软件,界面如下: 2、选择“根据模板新建工程”。操作如下: 3、导入数据。需要入准备好的dxf格式的CAD地形数据。操作如下: 在空白处右键,先关闭所有层(大部分层在刷图时用不上,仅打…

自动化测试2:selenium常用API

目录 1.webdirver API 1.1.定位元素 1.2CSS 1.语法 2,使用 1.3XPath定位 1.语法 2.使用 2.操作测试对象 2.1.鼠标点击与键盘输入 2.2submit 提交表单 2.3text 获取元素文本 3.添加等待 3.1.sleep休眠 3.2.智能等待 3.2.1.隐式等待 3.2.2显示等待 4.打印信息 …

web前端 --- CSS(04) -- 盒子模型、div+css网页布局、css3新特性

盒子模型 (1)网页标签分类: 行内元素:块级元素:有宽高,可以设置大小,同时不会让其他块元素默认占据当前行 (2)内边距: 内容和边线之间存在空白区域&#x…

路径规划算法:基于猫群优化的路径规划算法- 附代码

路径规划算法:基于猫群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于猫群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法猫群…

数据库基础——3.SQL概述及规范

这篇文章我们来讲一下SQL概述和使用规范 目录 1.SQL概述 1.1SQL背景 1.2 SQL语言排行榜 1.3 SQL分类 2.SQL规则与规范 2.1基本规则 2.2 SQL大小写规范 (建议遵守) 2.3 注 释 2.4 命名规则(暂时了解) 2.5 数据导入指令 1…

【硬件】嵌入式电子设计基础之数字电路

数字电路与模拟电路的设计思想和应用方法有许多不同之处。 计算器是一个典型的由数字电路实现的电子设备,用户通过数字或符号摁键输入运算式,计算器经过运算之后把结果显示在屏幕上。现代数学电子学始于1946年,其标志是一台以电子管为核心器件…

奥地利博士联培申请签证经验(奥地利签证)

记录一下奥地利申请签证经验,供有需要的小伙伴借鉴: 我申请的是去克拉根福大学联合培养一年,正常的居留签证需要半年之久,但是如果有托管协议(Hosting Agreement)可以先申请D类签证,抵达奥地利再…

Shell脚本攻略:循环语句for

目录 一、理论 1.for循环 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 6.实验六 7.实验七 一、理论 1.for循环 (1)for循环的常见三种用法 Ubuntu系统在6.10版本后默认使用dash环境; 而CentOS系统常见默认使用的是ba…

00后是真卷不过,工作没两年,跳槽到我们公司起薪22K都快接近我了

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…

C++搜索二叉树

一、搜索二叉树概念 搜索二叉树是一种树形结构,常用于map当中。搜索二叉树严格遵守左小右大的规则 C语言中实现搜索二叉树有一些困难,并且在面对一些特定题目实现较困难。因此采用C的方式再次实现搜索二叉树 二、搜索二叉树的实现 插入 搜索二叉树在…

ASEMI代理长电可控硅BT136参数,BT136规格,BT136说明

编辑-Z 长电可控硅BT136参数: 型号:BT136 RMS通态电流IT(RMS):6A 非重复浪涌峰值导通电流ITSM:25A 峰值栅极电流IGM:2A 平均栅极功耗PG(AV):0.5W 存储接点温度范围Tstg:-40 to 150℃ 工…

Linux -- 进阶 Web服务器 搭建基于 https 协议的静态网站 ( 预备知识 )

概念引入 : 什么是 HTTPS ? HTTPS 协议背景 ? >>> HTTP 协议 即 超文本传输协议 , 它出生的很早,在早期,网络服务的相关攻击呢,或者病毒啥的几乎没有,安全类的问 题也是少之又…

【SpringCloud】Gateway网关

文章目录 1、网关的作用2、搭建网关服务3、路由断言4、GatewayFilter5、全局过滤器6、过滤器的执行顺序7、限流过滤器8、跨域问题处理 1、网关的作用 服务就像一个景点,如果人人可以访问,不管是游客还是搞破坏的人都放进来,那一定出事。由此…