【Python基础】14.类的结构

类的结构

实例

  1. 使用面向对象开发,首先需要定义
  2. 使用 类名() 创建对象,创建对象的动作有两步
    1. 在内存中为对象 分配空间
    2. 调用初始化方法__init__(self,*args) 为对象初始化
  3. 创建对象后,内存 中就有了对象实际的存在 –实例

因此,通常:

  1. 创建出来的对象,叫做类的实例
  2. 创建对象的动作叫做实例化
  3. 对象的属性叫做实例属性
  4. 对象调用的方法叫做实例方法

在程序执行时:

  1. 对象各自拥有自己的实例属性
  2. 调用对象方法,可以通过self.
    • 访问自己的属性
    • 调用自己的方法
      每个对象都有自己独立的内存空间,保存各自不同的属性
      多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部

类是一个特殊的对象

class A(object):pass
  • 在程序运行时,同样会被加载到内存
  • 在python中,类是一个特殊的对象,通常称为类对象
  • 在程序运行时,类对象只有一份,使用一个类可以创建出来多个实例对象
  • 除了封装实例属性方法外,类对象还可以拥有自己的属性和**方法
    1. 类属性
    2. 类方法
  • 通过类名.的方式可以访问类属性或者调用类方法
访问语法访问对象
类名.属性类属性
类名.方法类方法(cls)
类名()__init__定义实例属性
对象名.方法名()实例方法(self)

类属性和实例属性

概念和使用
  • 类属性就是给类对象定义的属性
  • 通常用来记录与这个类相关的特征
  • 类属性不会用于记录实例对象的特征
示例
  • 定义一个工具类
  • 创建一个类属性,每次实例化的时候,类属性数值加1
  • 统计这个类创建了多少个对象
class Tool(object):count = 0def __init__(self, name):self.name = nameTool.count += 1tool1 = Tool("斧头")
tool2 = Tool("锤子")
tool3 = Tool("榔头")
print(Tool.count)
3
属性的获取机制
  1. 访问类属性有两种机制
    • 类名.类属性
    • 对象.类属性
  2. 可以使用对象.类属性访问类属性,源于python有一个向上查找的机制
    1. 首先,在对象内部查找对象属性
    2. 未找到对象属性,则向上查找类属性
  3. 使用赋值语句对象.类属性 = 值,只会创建一个对象属性并为其赋值,不能改变类变量的值

类方法

  • 类属性就是针对类对象定义属性
    1. 使用赋值语句在class 关键字下方定义属性
    2. 类属性用于记录与这个类相关的特征
  • 类方法就是针对类对象定义方法
    • 在类方法内部可以直接使用类属性和调用其他的类方法
定义类方法
@classmethod
def 类方法名(cls):pass
  • 类方法需要用修饰器@classmethod来标识,告诉解释器这是一个类方法
  • 类方法的第一个参数是cls
    • cls 传递的是类的引用地址,由哪个类调用,就传递这个类的引用地址
    • 这个参数和实例方法的self参数类似
    • cls参数名支持自定义,习惯用cls
  • 通过类名.类方法调用类方法,不需要传递cls参数
  • 在方法内部:
    • 使用 cls.类属性访问类属性
    • 使用 cls.类方法访问其他类方法
示例
class Tool(object):count = 0@classmethoddef show_tool_count(cls):print("工具对象的数量 %d" % cls.count)def __init__(self, name):self.name = nameTool.count += 1tool1 = Tool("斧头")
tool2 = Tool("锤子")
tool3 = Tool("榔头")
print(Tool.count)
Tool.show_tool_count()
3
工具对象的数量 3

静态方法

如果类中的一个方法:

  1. 不使用类属性,也不使用类方法
  2. 不适用实例属性,也不使用实例方法
    就可以将这个方法定义为静态方法
    语法如下:
@staticmethod
def 静态方法名():pass
class Tool(object):count = 0@classmethoddef show_tool_count(cls):print("工具对象的数量 %d" % cls.count)def __init__(self, name):self.name = nameTool.count += 1@staticmethoddef introduce():print("这是一个工具类,用来制造工具对象")Tool.introduce
这是一个工具类,用来制造工具对象

通过类名.静态方法名的方式,调用静态方法,不需要创建对象

案例综合

  1. 定义一个Game类
  2. 属性:
    1. 定义一个类属性 top_score 记录游戏的历史最高记录
    2. 定义一个实例属性 player_game 记录当前游戏的玩家姓名
  3. 方法
    1. 静态方法 show_help 显示游戏帮助信息
    2. 类方法 show_top_score 显示历史最高分
    3. 实例方法 start_game 开始玩游戏
  4. 主程序步骤
    1. 查看帮助信息
    2. 查看历史最高分
    3. 创建游戏对象,并开始玩儿游戏
# 1. 定义一个Game类
# 2. 属性:
#     1. 定义一个类属性 top_score 记录游戏的历史最高记录
#     2. 定义一个实例属性 player_game 记录当前游戏的玩家姓名
# 3. 方法
#     1. 静态方法 show_help 显示游戏帮助信息
#     2. 类方法 show_top_score 显示历史最高分
#     3. 实例方法 start_game 开始玩游戏
# 4. 主程序步骤
#     1. 查看帮助信息
#     2. 查看历史最高分
#     3. 创建游戏对象,并开始玩儿游戏class Game:top_score = 0def __init__(self, player_game):self.player_game = player_game@staticmethoddef show_help():print("帮助信息:让僵尸进入大门")@classmethoddef show_top_score(cls):print("历史最高分 %d" % cls.top_score)def start_game(self):print("%s 开始游戏" % self.player_game)game = Game("小明")
Game.show_help()
Game.show_top_score()
game.start_game()
帮助信息:让僵尸进入大门
历史最高分 0
小明 开始游戏

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

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

相关文章

devc++ 开发大游戏的各种链接命令集合

devc 开发 easyx 的链接命令集合 具体填写位置同结论 3,或者项目属性(Project Option)里面的 parameter 的 linker 一列。 -leasyx 链接 easyx 图形库 实现图形界面(这个是默认的,不用管。除非不想新建工程,一个 cpp 直接跑代码…

网站localStorage的导入和导出

存 localStorage.setItem(SET_QUERY_FORM, JSON.stringify(params)) 取 const FORM JSON.parse(localStorage.getItem(SET_QUERY_FORM)) 导出 (在console里面粘贴执行) let data JSON.stringify(localStorage,null, 4); // 这是你要下载的数据 …

决策树分类器(保姆级教学) 定义+特性+原理及公式+鸢尾花分类经典问题示例(完整Python代码带详细注释、保姆级分部代码解释及结果说明、决策树可视化及解释)

文章目录 引言定义特性基本原理和公式理解信息增益(ID3算法)熵的定义条件熵信息增益的计算 基尼不纯度(CART算法)基尼不纯度的定义基尼不纯度的计算例子 实现步骤解决鸢尾花分类问题(机器学习入门中的经典案例Python代…

makefile第七讲

更多精彩内容在公众号。 当make执行完后,我们期望将最终的可执行文件安装到系统目录下,这样在不同的目录下都可以执行编译的可执行文件,相当于做成了个命令。这个就需要用到make install。 源文件如下:用于判断系统是小端还是大端…

性能分析与调优

性能分析方法 自底向上:通过监控硬件及操作系统性能指标(cpu、内存、磁盘、网络等硬件资源的性能指标)来分析性能问题(配置、程序问题) 先检查,再下药 自顶向下:通过生成负载来观察被测试的系…

【ROS2笔记七】ROS中的参数通信

7.ROS中的参数通信 文章目录 7.ROS中的参数通信7.1使用CLI工具调整参数7.2参数通信之rclcpp实现7.2.1创建节点7.2.2rclcpp参数API Reference ROS2中的参数是由键值对组成的,参数可以实现动态调整。 7.1使用CLI工具调整参数 启动turtlesim功能包的环境 ros2 run …

如何在本地创建一个贪吃蛇小游戏node.js服务并实现无公网IP远程游玩

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

可信通信(TLS/SSL协议)

比特币,以太坊,超级账本在建立网络连接保证节点间可靠通信的时,都直接采用了传输层安全性协议(Transport Layer Security),TLS协议自从1999年发布以来已经广泛的应用在浏览器,电子邮件等应用中了…

OSPF笔记+大实验

OSPF综合大实验---实验报告 配置IP地址 R1: [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 172.16.33.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip add 172.168.34.1 24 R2: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 172.16.33.2 24…

Keil MDK下如何设置非零初始化变量 及变量指定位置- Arm CompilerV5 和 V6区别

目录 一、Arm CompilerV51.定义变量时,使用编译器扩展属性__attribute__((section("name"), zero_init))来将变量放入指定段中。其中section("name")选择一个指定的段,zero_init告诉编译器将变量放入ZI段。 二、Arm CompilerV61.定义…

Mybatis-plus自定义分页工具

Mybatis-plus自定义分页工具 这里主要是介绍通过MyBatis-Plus使用自定义分页工具进行条件分页查询示例等,方便以后查阅!!! 分页工具类-PageUtils PageUtils package com.wl.cloud.core.utils;import com.baomidou.mybatisplus.cor…

Jmeter接口测试:使用教程(下)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 上一篇我给大家讲了jmeter的基本介绍跟参数化和jmeter脚…

【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

前言 上文说到,Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能,用于保护基于Spring的应用程序。 上文又说到,在Spring Security中,过滤器(Filter)是一个重…

png静图转换gif动图如何操作?轻松一键快速转换gif动图

想要把多张Png格式图片转换成gif格式动图时要怎么操作?图片常见的有静图和动图,而jpg、png、gif等是最常见的图片格式。想要把png格式图片转换成gif动画还不想下载任何软件的时候就可以使用gif制作工具。不需要下载软件在线就能操作。能够轻轻松松就能快…

北斗卫星系统在海上测量中的创新应用

北斗卫星系统在海上测量中的创新应用 随着全球导航卫星系统技术的飞速发展,北斗卫星系统作为中国自主研发的全球卫星导航系统,在海上测量和导航领域展现出了无可比拟的优势和广阔的应用前景。 一、北斗卫星系统概述 北斗卫星系统是由中国自主研发的全球…

PostgreSQL开发与实战(8.3)锁的维护

作者:太阳 1 锁相关参数 deadlock_timeout(integer):默认1s,表示pg数据库仅对锁超时大于1s的情况进行死锁检测。 log_lock_waits : 默认关闭,若打开该参数则表示会将锁超时超过deadlock_timeout的信息记…

理解 HuggingFace 是什么

HuggingFace 是一个开源社区和公司,专注于提供自然语言处理(NLP)的工具和资源。它的主要特点包括: Transformers 库:HuggingFace 提供了一个名为 Transformers 的 Python 库,该库包含了大量的预训练模型和…

git远程仓库拉取超过1G报错解决办法

第一种 如果浅克隆最近一次提交不会超过1G那就浅克隆 //浅层clone代码 depth 1只会拉取最后一次log, depth(后面数字越大拉取的历史记录越多) 1.git clone --depth 1 远程地址 //拉取完整当前分支 2.git fetch --unshallow利用远程分支名称拉取 git branch -a git…

Unity WebGL 2020 Release-Notes

🌈WebGL 2020 Release-Notes 版本更新内容2020.3.48WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.47WebGL: Any recent desktop version of Firefox, Chrome, Edge or Safari.2020.3.46WebGL: Any recent desktop version of Fire…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题:如图Tomcat乱码,而且启动时的系统日志不会乱码,webapp中的打印日志才乱码。 idea中的情况如下:正常中文展示。 问题分析:网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配,网上集中的解决…