python学习笔记15 python中的类

上一篇我们介绍了python中的库 ,学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库,常见的内置库(random、hashlib、json、时间、os)
这一篇我们来看一下python中的类

创建一个类
	class 类的名称():def __init__(self,参数1,参数2,...):代码块1def 方法名1(参数3,参数4,...):代码块2def 方法名2(参数5,参数6,...):代码块3...#特别注意:class类中的函数,
#        必须要有一个参数,且是第一个定义,self#self: 表示当前调用该方法的对象
# 定义一个类
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
通过一个类创建一个对象
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
通过一个类创建多个对象
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")
# 相当于创建一个Person类的对象,将对象的地址值赋值给变量p1
p1 = Person()
p1.eat()    #吃饭
p1.call('王子奇')  #打电话给王子奇
print("----------------------------")
p2 = Person() # 在内存中开辟一个新的空间
p2.eat()    #吃饭
p2.call('王俊凯')  #打电话给王俊凯
print(id(p1)==id(p2)) # False 地址值不同
给对象赋予属性
  • 类中不写,创建对象的之后,单独为该对象创建新的属性
class Person:def eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")p1 = Person()
p1.name = '小虎'
print(f"p1对象的姓名为:{p1.name}")p2 = Person() # 在内存中开辟一个新的空间
# print(f"p1对象的姓名为:{p2.name}") # 报错
  • 类中编写,创建对象的时候,直接就拥有了某个属性,并且可以直接赋值
class Person:def __init__(self,name):# self.name 定义一个类中的属性,叫做nameself.name = namedef eat(self):print("吃饭")def call(self,name):print(f"打电话给{name}")# 使用类名() 的方式创建对象,实际上底层调用的是类中的__init__(self)
# 若自己没写,默认一个类中有一个__init__(self),且只能有一个
p1 = Person('小虎')
print(f"p1对象的姓名为:{p1.name}")    #p1对象的姓名为:小虎p2 = Person('张三')
print(f"p2对象的姓名为:{p2.name}")    #p2对象的姓名为:张三

练习题:

手机:
属性: 品牌, 价格, 颜色
行为:打电话, 发短信

class Phone():def __init__(self,brand,price,color):self.brand=brandself.price=priceself.color=colordef call(self,name):print(f"正在打电话给{name}...")def send_message(self,name,text):print(f"给{name}发短信了,短信内容是:{text}")if __name__ == '__main__':p1=Phone('HUAWEI',9999,"宝石蓝")p1.call('王俊凯')p1.send_message('王俊凯','你什么时候开演唱会')p2=Phone('XIAOMI',5999,"钻石白")p1.call('王子奇')p1.send_message('王子奇', '和黄景瑜在拍一个剧吧')
类的继承

继承是将多个类中的相同的部分,单独提取到一个类中,这些类于单独提出来的这个类产生一个关系,这个关系,就叫做继承关系,其他类中也就拥有了相同的部分,不需要特地定义出来。

通过继承,子类拥有了父类中的成员。

class 父类:pass
class 子类(父类):pass
class Student:def __init__(self,id,name,age):self.id=idself.name=nameself.age=agedef __str__(self):return f'Student:({self.id},{self.name},{self.age})'def study(self):print(f'{self.name}在学习')def play(self):print(f'{self.name}在玩')
class PrimaryStudent(Student):pass
class HighStudent(Student):pass
stu1=PrimaryStudent('20240001','图图',8)
stu1.study()
stu1.play()
stu2=HighStudent('20240002','莉莉',15)
stu2.study()
stu2.play()

在这里插入图片描述

特别注意:

  1. 子类无法继承父类中私有的成员

    class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")
    class Son(Fu):pass
    s1 = Son()
    s1.fun1()
    s1.__fun2()
    

    在这里插入图片描述

  2. 若子类中出现与父类的函数名以及函数参数都一样,只是实现不一样的情况,子类对象调用的是自己的函数

    class Fu:def fun1(self):print("好好学习,天天向上!")def __fun2(self):print("这是父类中私有的成员函数__fun2")def fun3(self):self.__fun2()
    class Son(Fu):def fun1(self):print("这是子类中的函数fun1")pass
    s1 = Son()
    s1.fun1()
    

    在这里插入图片描述

  3. 子类中可以定义父类中没有的成员属性

    class Fu:def __init__(self,name,age):self.name = nameself.age = age
    class Zi(Fu):def __init__(self, name, age, sid):super().__init__(name,age)self.sid = sid
    z1 = Zi('张三',18, 1001)
    print(z1.name,z1.age,z1.sid)    #张三 18 1001
    
  4. 子类继承父类的同时,可以出现父类中没有的行为

    class Fu2:def fun1(self):print("shujia")
    class Zi2(Fu2):def show(self):print("shujia666")
    # d1 = Fu2()
    # d1.fun1()
    # d1.show() #报错
    d2 = Zi2()
    d2.fun1()
    d2.show()
    

    在这里插入图片描述

  5. 子类中可以使用super()来调用父类中非私有的成员

    class Fu:def fun1(self):print("这是父类中的fun1")
    class Zi(Fu):def fun1(self):print("这是子类中的fun1")def show(self):self.fun1() # 调用的是子类中重写后的fun1函数# 调用父类中的fun1super().fun1()
    z = Zi()
    z.show()
    

    在这里插入图片描述

  6. 在python中一个类可以同时继承多个类

    class Fu:def fun1(self):print("这是父亲中的函数fun1")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")
    class Son(Fu, Mather):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    

    在这里插入图片描述

    若同时继承的类中有相同的函数名,谁先写就调用谁的

    class Fu:def fun1(self):print("这是父亲中的函数fun1")def show(self):print("这是父亲中的函数show")
    class Mather:def fun2(self):print("这是母亲中的函数fun2")def show(self):print("这是母亲中的函数show")
    class Son(Mather,Fu):def fun3(self):print("这是儿子自己的函数")
    s1 = Son()
    s1.fun1()
    s1.fun2()
    s1.fun3()
    s1.show() # 调用的是母亲中的show
    

    在这里插入图片描述

多态

表示的是某一个事物在不同时刻下的不同状态

在python中默认支持多态,因为python是动态数据类型语言。

class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"def eat(self):print("吃")def sleep(self):print("睡")
#抽象
class Dog(Animal):pass
a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
print(a1)   #name:小黑, age:3
抽象
from abc import abstractmethod
# from typing import override
class Animal:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"name:{self.name}, age:{self.age}"@abstractmethoddef eat(self):pass@abstractmethoddef sleep(self):passclass Dog(Animal):# @overridedef eat(self):print("🐕吃🥩")# @overridedef sleep(self):print("🐕趴着睡")# a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
a1.eat()    #🐕吃🥩
a1.sleep()  #🐕趴着睡
类变量

将变量定义在类中函数外

class Demo1:
# 类变量a = 100def fun1(self):a = 10print(a)print(Demo1.a) # 通过类名直接访问
d1 = Demo1()
d1.fun1()
print(d1.a) # 也可以通过对象名进行访问

在这里插入图片描述
下一篇我们来几个关于类的练习题结束我们python的基础语法内容啦。
我们即将进入python的进阶内容,数据分析numpy、pandas、matplotlib的学习!
点赞收藏关注,一起打卡python学习吧

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

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

相关文章

Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和

贪心算法 part02 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 求最大利润 将每天的正利润加和 public int maxProfit(int[] prices) {int totalPrices 0;for(int i0;i<prices.length;i){if(i<prices.length-1&&prices[i1]>prices[…

洛谷P1827 [USACO3.4] 美国血统 American Heritage(c嘎嘎)

题目链接&#xff1a;P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及 首先介绍下二叉树的遍历&#xff1a; 学过数据结构都知道二叉树有三种遍历&#xff1a; 1.前序遍历&#xff1a;根左右 2.中序遍历&#xff1a;左根…

『数据结构』空间复杂度

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

多模态COGMEN详解

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期

需求分析 上一个案例我们输出了PWM波&#xff0c;这个案例我们使用输入捕获功能&#xff0c;来测试PWM波的频率/周期。 把测到的结果通过串口发送到电脑&#xff0c;检查测试的结果。 如何测量 1、输入捕获功能主要是&#xff1a;测量输入通道的上升沿和下降沿 2、让第一个…

重生之我在异世界学编程之C语言:操作符篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文1. 算术操作符2. 关系&#xff0…

STM32 进阶 定时器 2基本定时器 基本定时器中断案例:LED闪烁

基本定时器 基本定时器TIM6和TIM7各包含一个16位自动装载计数器&#xff0c;由各自的可编程预分频器驱动。 这2个定时器是互相独立的&#xff0c;不共享任何资源。 这个2个基本定时器只能向上计数&#xff0c;由于没有外部IO&#xff0c;所以只能计时&#xff0c;不能对外部…

OpenVas安装步骤及报错问题

安装步骤 1、更新系统 apt update && apt upgrade && apt dist-upgrade 2、安装openvas apt-get install openvas 3、初始化 gvm-setup 时间要很久 4、检查安装结果 gvm-check-setup 安装成功 5、设置用户名和密码&#xff0c;都为admin sudo runuse…

深度学习之pth转换为onnx时修改模型定义‌

文章目录 概述实现步骤python代码 概述 在将PyTorch模型&#xff08;.pth文件&#xff09;转换为ONNX格式时&#xff0c;通常的转换过程是通过torch.onnx.export函数来实现的。这个过程主要是将PyTorch模型的计算图导出为ONNX格式&#xff0c;以便在其他框架或环境中使用。 在…

STL算法之sort

STL所提供的各式各样算法中&#xff0c;sort()是最复杂最庞大的一个。这个算法接受两个RandomAccessIterators(随机存取迭代器)&#xff0c;然后将区间内的所有元素以渐增方式由小到大重新排列。还有一个版本则是允许用户指定一个仿函数代替operator<作为排序标准。STL的所有…

解决Tomcat运行时错误:“Address localhost:1099 is already in use”

目录 背景: 过程&#xff1a; 报错的原因&#xff1a; 解决的方法&#xff1a; 总结&#xff1a; 直接结束Java.exe进程&#xff1a; 使用neststat -aon | findstr 1099 命令&#xff1a; 选择建议&#xff1a; 背景: 准备运行Tomcat服务器调试项目时&#xff0c;程序下…

AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报

一、XMLHttpRequest基本使用 XMLHttpRequest&#xff08;XHR&#xff09;对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…

矩阵加法        ‌‍‎‏

矩阵加法 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个n行m列的矩阵A和B&#xff0c;输出它们的和AB。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵的行数和列数。1 <…

flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示

flink-connector-mysql-cdc&#xff1a; 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本&#xff1a;3.2.0 flink版本&…

ELK的Filebeat

目录 传送门前言一、概念1. 主要功能2. 架构3. 使用场景4. 模块5. 监控与管理 二、下载地址三、Linux下7.6.2版本安装filebeat.yml配置文件参考&#xff08;不要直接拷贝用&#xff09;多行匹配配置过滤配置最终配置&#xff08;一、多行匹配、直接读取日志文件、EFK方案&#…

HTML 添加 文本水印

body,html {margin: 0;height: 100vh;width: 100vw;} // 自定义文案const setting {text: "水印文案", // 水印内容innerDate: true, // 在水印下方增加日期width: 110, // 水印宽度};// 自定义文字水印const watermark (function () {return {build: function (a…

Android平台GB28181设备接入模块如何支持GB28181云端录像补录

技术背景 GB28181 的补录功能是一种用于弥补视频数据缺失的重要机制。在实际的视频监控场景中&#xff0c;由于网络不稳定、设备故障等多种因素&#xff0c;可能会导致视频数据在上云或存储过程中出现缺失&#xff0c;无法保证数据的完整性。GB28181 的补录功能就是为了解决这…

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言 前面给大家介绍了动态表头的导入&#xff0c;这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入&#xff0c;我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次&#xff0c;我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智行无忧停车场管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 1.1 项目功能 2.0 用户登录功能 3.0 首页界面 4.0 车辆信息管理功能 5.0 停车位管理功能 6.0 入场登记管理功能 7.0 预约管理功能 8.0 收费规则功能 9.0…

365天深度学习训练营-第P7周:马铃薯病害识别(VGG-16复现)

文为「365天深度学习训练营」内部文章 参考本文所写记录性文章&#xff0c;请在文章开头带上「&#x1f449;声明」 &#x1f37a; 要求&#xff1a; 自己搭建VGG-16网络框架【达成√】调用官方的VGG-16网络框架【达成√】如何查看模型的参数量以及相关指标【达成√】 &#…