Python3入门与进阶笔记(六):初识类

目录
一些解释
属性
类名建议首字母大写,通常用驼峰规则命名。变量名建议小写,下划线隔开。类最基本的作用是封装。
写在类内非方法中的语句在类加载的时候会执行,且只会执行一次,例如下面的print语句,类加载时就会打印Person类 2。类属性在类加载的时候定义。
class Person(object):sex = 'male' # 类属性money = 2 # 类属性def __init__(self, name, age=None): # 实例方法之构造方法self.name = name # 实例属性self.age = age # 实例属性def run(self): # 实例方法print(self.get_sex())return f"{self.name} 在跑"# 类加载的时候会执行,且只会执行一次print(f"Person类 {money}")@classmethoddef get_sex(cls): # 类方法print(cls.get_money())return f"Person类 {cls.sex}"@staticmethoddef get_money(): # 静态方法return f"Person类staticmethod {Person.money}"if __name__ == "__main__":print("=" * 20)print(Person.get_money())print("=" * 20)print(Person.get_sex())print("=" * 20)alice = Person('alice', 2)print(alice.run())
一些解释
- self
- 定义访问修改实例属性、调用方法,通过self.
- 一般用于实例方法,作为第一个形参,代表当前实例
- 必须传入,在通过实例对象.调用实例方法的时候,python解释器会自动将实例对象传给self,这也就是为啥在实例方法里面可以通过self.访问实例属性、方法,因为其绑定到了当前对象
- cls
- 调用类方法,通过cls.
- 一般用于类方法,作为第一个形参,代表当前类
- 必须传入,在通过类名.调用类方法的时候,python解释器会自动将类传给cls,这也就是为啥在类方法里面可以通过cls.访问实例属性、方法,因为其绑定到了当前类
属性
- 类属性
- 定义于类中个各方法的外部
- 在类加载的时候定义
- 建议通过类名.直接调用和修改,在类方法中,建议通过cls.,虽然类名.也可以,但是不便于维护
- 类属性建议通过cls.、类名.访问修改
- 类属性可以通过self.、实例对象.访问,但是不能通过它修改,因为表面看上去修改了它的值,其实是给当前对象定义(访问、修改)了一个与类属性同名的实例属性,特别的当我们在类的外部通过实例对象.,就会更可怕,因为只有该实例对象拥有了这个与类属性同名的实例属性,其它的实例对象没有该实例属性。
- 实例属性
- 定义在实例方法内部
- 建议定义在__init__构造函数内部,这样我们对类进行实例化的时候,这个实例化对象就会拥有其实例属性,不需要我们显示的调用。若定义在其它实例方法内部,则直到调用那个实例方法该对象才会拥有那些属性
- 因其定义在实例方法内部,所以我们必须通过self.来定义访问修改,不加self.仅是该实例方法的局部变量,而不属于实例属性
方法
实例方法:
- 可访问修改实例属性
- 通常只能访问类属性(self.不能修改类属性,只是创建了同名的实例属性),但是可以通过类名.强制修改类属性
- 通过对象名.调用,在实例方法内可以直接通过self.调用
- 构造方法是特殊的实例方法,__init__(self),自动执行,可以不写return,此时返回类型是None,不能强制返回其他类型
类方法:
- 不可访问实例属性
- 可以访问修改类属性
- 通过类名.调用(也可通过对象名.调用,不推荐),在类方法内可以直接通过cls.调用
静态方法:定义加@staticmethod,不用多传一个形参。可以用类也可以用对象调用静态方法,静态方法也可以访问类变量,和类方法没啥太多区别,在静态方法中不可以访问实例变量。不推荐用静态方法,因为静态方法不是很能体现面向对象的特点。
- 不可访问实例属性
- 可以访问修改类属性(通过类名.)
- 通过类名.调用(也可通过对象名.调用,不推荐)
通过在方法名前加__将方法变为私有的,在外部不可以通过对象名/类名.__方法名访问。python在类外部可以通过对象名.变量名添加实例变量。严格来讲python并没有真正的私有变量,因为可以通过对象名._类名__变量名。
继承
python支持多继承和多重继承。魔法方法类名.__mro__可以查看继承顺序。

例如上图,图上的左右是继承时写在括号中的左右的顺序,继承顺序由先至后如下,这也是继承时不同的父类有同名属性和同名方法的查找路径。
<class '__main__.E'>, <class '__main__.D1'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.A2'>, <class 'object'>

<class '__main__.E'>, <class '__main__.A3'>, <class '__main__.C2'>, <class '__main__.D1'>, <class '__main__.C1'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.A2'>, <class 'object'>
<class '__main__.E'>, <class '__main__.D1'>, <class '__main__.C1'>, <class '__main__.B1'>, <class '__main__.A1'>, <class '__main__.B2'>, <class '__main__.C2'>, <class '__main__.B3'>, <class '__main__.A2'>, <class 'object'>
我们可以看到大致路径是这样的,先从最左边的父类一步一步往上找(每次也只找最左侧的父类)类似于深度搜索;若是发现该父类还有其它子类,则我们回过头去走那些没有走过的路(例如到了A2,发现还可以从E->D1->C2->B3,其中只有C2->B3未遍历,所以加进去)
相关文章:
Python3入门与进阶笔记(六):初识类
目录 一些解释 属性 类名建议首字母大写,通常用驼峰规则命名。变量名建议小写,下划线隔开。类最基本的作用是封装。 写在类内非方法中的语句在类加载的时候会执行,且只会执行一次,例如下面的print语句,类加载时就会…...
Prometheus监控实战系列九:主机监控
Prometheus使用各种Exporter来监控资源。Exporter可以看成是监控的agent端,它负责收集对应资源的指标,并提供接口给到Prometheus读取。不同资源的监控对应不同的Exporter,如node-exporeter、mysql-exporter、kafka-exporter等,在这…...
JVM知识整理
JVM知识整理 JVM的主要组成部分 JVM包含两个两个子系统(类加载子系统和执行引擎)和两个组件(运行时数据区与和本地库接口) 类加载子系统:根据给定的全限定类名来加载class文件到运行时数据区域中的方法区。执行引擎&a…...
【C++】二叉搜索树
A:你长大后想要做什么? B:写下“快乐”…… A:不,你理解错我的意思了,我是说 B:不,是你理解错了人生…… 文章目录一、二叉搜索树的实现1.struct TreeNode{}2.迭代版本2.1 Insert()插入结点(解决链接的问题)…...
leetcode -- 21. 合并两个有序链表
🐨目录📑1. 题目🛶2. 解法- 头插到新链表🐬2.1 思路🐬2.1 代码实现⛵3. 解法优化 - 带哨兵位🐋3.1 思路🐋3.2 代码实现🚤4. 题目链接📑1. 题目 将两个升序链表合并为一个…...
计算机组成原理|第四章(笔记)
目录第四章 存储器4.1 概述4.1.1 存储器分类4.1.2 存储器的层次结构4.2 主存储器4.2.1 概述4.2.2 半导体存储芯片简介4.2.3 随机存取存储器(RAM)4.2.4 只读存储器(ROM)4.2.5 存储器与CPU的连接4.2.6 存储器的校验4.2.7 提高访存速…...
【Unity3D-BUG记录】Unity3D中出现“动画片段必须标记为Legacy的警告”消除方法
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中可能会遇到下面的警告: The AnimationClip…...
Spring Bean的定义(含创建Bean的三种方式)
🏆 文章目标:复习和理解下Spring Bean的定义 🍀 Spring Bean的定义(含创建Bean的三种方式) ✅ 创作者:Jay… 🎉 个人主页:Jay的个人主页 🍁 展望:若本篇讲解内…...
vue的路由-vue router(一)
vue的路由-vue router一、路由的基本使用HTMLrouter-linkrouter-viewJavaScript二、带参数的动态路由匹配三、嵌套路由四. 编程式导航导航到不同的位置替换当前位置横跨历史篡改历史五. 命名路由六. 命名视图嵌套命名视图七. 重定向和别名重定向别名八. 将 props 传递给路由组件…...
DevOps流水线搭建-PHP版本
一、介绍流水线发布代码1、官网https://www.jenkins.io/zh2、kubesphere里的介绍https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/choose-jenkins-agent/3、git仓库可以自己写点测试代码,提交,待会测试用https://gitee.com/…...
C语言之按位取反~(七十一)
计算机存储数据基本知识计算机中二进制数包括(正数和负数)是以补码形式存储。符号位:补码的最左侧首位是符号位,0表示正数,1表示负数。二进制有三种形式:原码、反码、补码。正数的补码和反码:是…...
C# 委托
Action 在 C# 中,Action 是一个预定义的委托类型,表示一个不带参数和返回值的方法。它的定义如下: public delegate void Action();Action 委托可以用于表示任何没有参数和返回值的方法。例如: // 定义一个不带参数和返回值的方…...
leetcode究极刷题笔记(11~15)
(11)盛最多水的容器(中等) 实现思路: 定义两个指针(a,b),分别指向数组的前后位置,如果此时a的值小于b的话,就将a右移一位,如果此时b指向的值小于…...
【C语言】一篇带你从零了解 枚举
文章目录什么是枚举枚举类型的定义枚举的优点枚举的使用什么是枚举 枚举是 C 语言中的一种基本数据类型 可以让数据更简洁,更易读。 枚举顾名思义就是 一 一 列举。 把可能的取值 一 一列举。 比如我们现实生活中: 一周的星期一到星期日是有限的7天&…...
用Pytorch搭建一个房价预测模型
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、项目介绍 二、准备工作 三、实验过程 3.1数据预处理 3.2拆分数据集 3.3构建PyTorch模型 3.3.1.数据转换 3.3.2定义模型架构 3.3.3定义损失准则和优化器 3.3.4创建…...
《Netty》从零开始学netty源码(十五)之ServerSocketChannel
在NioServerSocketChannel中调用newChannel方法创建java原生的channel,过程如下: ServerSocketChannel是一个抽象类,WEPollSelectorProvider调用openServerSocketChannel方法创建的是它的实现类ServerSocketChannelImpl,类结构如下…...
Java stream性能比较
环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17CPU:8核 ➜ ~ cat /proc/cpuinfo | egrep -ie physical id|cpu cores physical id : 0 cpu cores : 1 physical id : 2 cpu cores : 1 physical id : 4 cpu cores : 1 physical id : 6 cpu cores : 1 physical id …...
【数据结构与算法】设计循环队列
文章目录👑前言如何设计循环队列设计循环队列整体的代码📯写在最后👑前言 🚩前面我们 用队列实现了一个栈 ,用栈实现了一个队列 ,相信大家随随便便轻松拿捏,而本章将带大家上点难度,…...
最新版!国内IT软件外包公司汇总~
金三银四已经过去一半,再过几个月又将迎来毕业季,大家有没有找到心仪的工作机会呀?有很多同学说今年的金三银四似乎不存在了。小李:今年的金三银四变成了铜三铁四,不断地投递又不断地造拒。小王:大量已读不…...
MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
