python编程Day12-属性和方法的分类

news2025/1/22 20:46:22
  • 私有和公有

在python中 定义类的时候,可以给 属性和方法设置 访问权限,即规定在什么地方可以使用。
权限一般分为两种:公有权限、私有权限

  • 公有权限
  • 定义:直接定义的属性和方法就是公有的
  • 特点: 可以在任何地方访问和使用,只要有对象就可以访问和使用。
  • 私有权限
  • 定义:
    1、只能在类内部定义(class 关键字的缩进中
    2、只需要在属性名 或者方法名 前边 加上两个下划线,这个方法或者属性就变成了私有的。
  • 特点:私有 只能在当前类的内部使用,不能在类外部和子类直接使用。
  • 应用场景:一般来说,定义的属性和方法都为公有的。 某个属性 不想在外部直接使用,定义为私有; 某个方法,是内部的方法(不想在外部使用),定义为私有。
"""定义人类,name 属性 ,age 属性(私有)"""
class Person:
    def __init__(self, name, age):     # 公有方法
        self.name = name    # 公有
        self.__age = age    # 公有 --> 私有,在属性名前加上两个下划线。

    def __str__(self):     # 公有方法
        return f'{self.name}, {self.__age}'

    def set_age(self, age):      # 定义公有方法,修改私有属性
        if age < 0 or age > 120:
            print('提供的年龄信息不对。')
            return
        self.__age = age


if __name__ == '__main__':
    xw = Person('小王', 18)
    print(xw)    # 小王, 18
    xw.__age = 1000    # 添加一个公有 属性 __age
    print(xw)   # 小王, 18
    xw.set_age(110)
    print(xw)    # 小王, 110


  • 对象分类

python 中一切皆对象

  • 对象分类

类对象 就是类
代码执行的时候,解释器会自动创建
作用:

  • 1、使用类对象创建 实例对象
  • 2、存储一些类的特征值(类属性)
  • 实例对象

1、创建对象也称为实例化,所以 由类对象(类)创建的对象 称为是实例对象,简称实例。
2、一般来说,没有特殊强调,我们所说的对象 都是指 实例对象(实例)
3、实例对象也可以保存实例特征值(实例属性)
4、就是使用 类名()创建的对象。

  • 属性的划分

使用 实例对象.属性 访问属性 的时候,会先在 实例属性中查找,如果找不到,去类属性中查找,找到就使用,找不到就报错。
即 :每个实例对象 都有可能访问类属性值(前提,实例属性和类属性不重名。)

  • 实例属性
  • 概念:
    是每个实例对象 具有的特征(属性)。每个实例对象的特征
  • 定义:
    一般都是 在 init 方法中,使用 self.属性名 = 属性值 来定义。
  • 特征(内存):
    每个实例对象 都会保存自己的实例属性,即 内存中存在多份
  • 访问和修改:
    # 可以认为是通过 self
    实例对象.属性 = 属性值 # 修改
    实例对象.属性 # 访问
  • 类属性
  • 概念:
    是类对象具有的 特征,是整个类的特征
  • 定义:
    一般都是 在类的内部( class 缩进中),方法的外部 (def 的缩进外部) 定义的变量
  • 特征(内存):
    只有类对象保存的一份,即在内存中只有一个。
  • 访问和修改:
    # 即通过类名
    类对象.属性 = 属性值
    类对象.属性
  • 什么时候定义类属性?

代码中 使用的属性 基本上都是 实例属性,即都通过 self 定义。
某个属性值描述的信息是整个类的特征(这个值变动,所有的这个类的对象这个特征都会发生变化)

  • 案例

在这里插入图片描述

# 1. 定义一个 工具类
# 2. 每件工具都有自己的 name
# 3. 需求 —— 知道使用这个类,创建了多少个工具对象?

class Tool:
    # 定义类属性 count,记录创建对象的个数
    count = 0
    def __init__(self, name):
        self.name = name    # 实例属性,工具的名字
        # 修改类属性的值
        Tool.count += 1  # 类名.属性 = 属性值


if __name__ == '__main__':
    # 查看 创建对象的个数
    print(Tool.count)  # 0 查看类.属性
    tool1 = Tool('锤子')
    print(Tool.count)  # 1
    tool2 = Tool('扳手')
    print(Tool.count)   # 2
    print(tool2.count)   # 2  先找实例属性 count,找不到,找类属性 count,找到 ,使用。
    
  • 方法的划分

  • 实例方法

  • 定义时机:
    如果方法中 需要使用 实例属性,则这个方法 必须 定义为 实例方法
  • 定义:
    直接定义的方法就是实例方法
class 类名:
	def 方法名(self):
		pass
  • 参数:
    参数一般写做 self,表示的是 实例对象。
  • 调用:
    实例对象.方法名()
  • 类方法
  • 定义时机:
    如果方法中 不需要使用 实例属性,但需要使用 类属性,则这个方法 可以 定义为 类方法(建议)
  • 定义:
    定义类方法,需要在方法名上方 书写 @classmethod, 即使用@classmethod 装饰器装饰
class 类名:
	@classmethod
	def 方法名(cls):
		pass
  • 参数:
    参数一般写做 cls ,表示类对象,即类名,同样不需要手动传递,Python 解释器会自动传递。
  • 调用:
    # 方法一
    类名.方法名()
    # 方法二
    实例对象.方法名()
  • 静态方法(了解)
  • 定义时机:
    方法中 既不需要使用 实例属性,也不需要使用 类属性,可以将这个方法定义为 静态方法。
  • 定义:
    定义静态方法,需要使用 装饰器吧 @staticmethod 装饰方法。
class 类名:
	@staticmethod
	def 方法名():
		pass
  • 参数
    静态方法 一般对参数没有要求,一般不写
  • 调用:
    # 方法一
    类名.方法名()
    # 方法二
    实例对象.方法名()
  • 类方法实例
# 1. 定义一个 工具类
# 2. 每件工具都有自己的 name
# 3. 需求 —— 知道使用这个类,创建了多少个工具对象?

class Tool:
    # 定义类属性 count,记录创建对象的个数
    count = 0
    def __init__(self, name):
        self.name = name    # 实例属性,工具的名字
        # 修改类属性的值
        Tool.count += 1  # 类名.属性 = 属性值

    @classmethod
    def show_tool_count(cls):   # cls 就是类对象,类名
        return cls.count



if __name__ == '__main__':
    # 查看 创建对象的个数
    print(Tool.show_tool_count())
    tool1 = Tool('锤子')
    print(Tool.show_tool_count())  # 通过类对象.方法名() 调用
    tool2 = Tool('扳手')
    print(tool2.show_tool_count())  # 通过实例对象.方法名()调用

  • 案例一
# 需求:
# 1. 设计一个 Game 类
# 2. 属性:
# • 定义一个 top_score 类属性 -> 记录游戏的历史最高分
# • 定义一个 player_name 实例属性 -> 记录当前游戏的玩家姓名
# 3. 方法:
# • 静态方法 show_help() -> 显示游戏帮助信息
# • 类方法 show_top_score() -> 显示历史最高分
# • 实例方法 start_game() -> 开始当前玩家的游戏
# - ① 使用随机数 生成 10-100 之间数字 作为本次游戏的得分
# - ② 打印本次游戏得分 : 玩家 xxx 本次游戏得分 ooo
# - ② 和历史最高分进行比较, 如果比历史最高分高, 修改历史最高分
# 4. 主程序步骤: main
# 1 查看帮助信息
# 2 查看历史最高分
# 3 创建游戏对象,开始游戏
# 4 再一次游戏
import random
class Game:
    """
    类名: Game
    属性:top_score = 0 类属性  ,保存历史最高分
        player_name 实例属性  定义在  init 中
    方法:
    """
    top_score = 0
    def __init__(self, play_name):
        self.play_name = play_name   # 实例属性

    # 静态方法
    @staticmethod
    def show_help():
        print('这是游戏的帮助信息')

    # 类方法
    @classmethod
    def show_top_score(cls):
        # 类方法 show_top_score() -> 显示历史最高分
        print(f'历史最高分为: {cls.top_score}')
        # return Game.top_score  # 类名.属性名

    def start_game(self):
        print(f'玩家{self.play_name}开始游戏')
        score = random.randint(10, 100)
        print(f'玩家 {self.play_name} 本次游戏得分 {score}')
        if score > Game.top_score:
            Game.top_score = score



if __name__ == '__main__':
    Game.show_help()
    Game.show_top_score()
    player = Game('小明')
    player.start_game()
    Game.show_top_score()
    player = Game('小明')
    player.start_game()
    Game.show_top_score()



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

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

相关文章

Moving Tables

任务内容 Description The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a pla…

小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记 目录 美食列表 功能描述 准备工作 创建项目 配置页面 配置导航栏 启动本地服务器 页面初始数据 设置获取美食数据 设置onload函数 设置项目配置 页面渲染 页面样式 处理电话格式 创建处理电话格式脚本 页面引入脚本 …

Facebook广告文案流量秘诀

Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密&#xff01; 一、广告文案怎么写&#xff1f; 正文&#xff1a;这是帖子的正文&#xff0c;出现在您姓名的正下方。它可…

TEXT2SQL工具vanna本地化安装和应用

TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL&#xf…

标书里的“废标雷区”:你踩过几个?

在投标领域&#xff0c;标书的质量不仅决定了中标的可能性&#xff0c;更是体现企业专业度的关键。但即便是经验丰富的投标人&#xff0c;也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中&#xff0c;也可能是投标文件格式的规范问题。以下&…

操作系统——I/O系统

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt&#xff0c;仅供学习交流使用&#xff0c;谢谢。 概述 计算机的两个主要工作是I/O和处理。I/O系统的目标是提高设备利用率&#xff0c;尽量提高CPU与I/O设备间的并行工作程度&#xff0c;I/O主要技术包括中断技术、DMA技术、…

【 工具变量】IPCC碳排放因子数据测算表

一、数据简介&#xff1a; 排放因子法是IPCC提出的一种碳排放估算方法&#xff0c;也是目前适用范围最广、应用最为普遍的方法。将各类能源消耗的实物统计量转变为标准统计量&#xff0c;再乘以各自的碳排放因子&#xff0c;加总之后就可以得到碳排放总量。如果按照ISO14064标…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代&#xff0c;流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步&#xff0c;流媒体播放器的核心技术和发展趋势不断演变&#xff0c;以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

63 基于单片机的四个速度比较

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用四个滑动变阻器连接数模转换器模拟四个速度值&#xff0c;通过LCD1602显示&#xff0c;然后检测出最高的…

4.模块化技术之子程序

总学习目录请点击下面连接 SAP ABAP开发从0到入职&#xff0c;冷冬备战-CSDN博客 目录 ​编辑 1.模块化基础和概述 使用模块化有什么好处 两大类模块化技术 程序局部的模块化 SAP系统内全局模块化 封装有什么好处&#xff1f; 2.子程序模块化 三种传递类型 子程序结构…

利用Python实现子域名简单收集

免责申明 本文仅是用于学习研究子域名信息收集&#xff0c;请勿用在非法途径上&#xff0c;若将其用于非法目的&#xff0c;所造成的一切后果由您自行承担&#xff0c;产生的一切风险和后果与笔者无关&#xff1b;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法…

k8s,进一步理解Pod

比如&#xff0c;凡是调度、网络、存储&#xff0c;以及安全相关的属性&#xff0c;基本上是Pod 级别的。 这些属性的共同特征是&#xff0c;它们描述的是“机器”这个整体&#xff0c;而不是里面运行的“程序”。比如&#xff0c;配置这个“机器”的网卡&#xff08;即&#…

Unity 使用LineRenderer制作模拟2d绳子

效果展示&#xff1a; 实现如下&#xff1a; 首先&#xff0c;直接上代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案&#xff0c;如需获取博物馆导览系统解决方案可前往文章最下方获取&#xff0c;如有项目合作及技术交流欢迎私信我们哦~撒花&#xff01; 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中&#xff0c;博物馆作为文化传承和知…

14.在 Vue 3 中使用 OpenLayers 自定义地图版权信息

在 WebGIS 开发中&#xff0c;默认的地图服务通常会带有版权信息&#xff0c;但有时候我们需要根据项目需求自定义版权信息或添加额外的版权声明。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;完成自定义地图版权信息的实现。 最终效果…

详解下c语言中的typedef

相信学习过c语言的很多同学都对typedef很陌生&#xff0c;感觉它离自己很遥远&#xff0c;自己很少用到。但实际上&#xff0c;我们看很多地方&#xff0c;包括很多大神级别的代码中&#xff0c;它却又经常使用。今天我们就详细描述下它&#xff0c;使我们对它有一个更深的认识…

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…

Ensemble Learning via Knowledge Transfer for CTR Prediction 论文阅读

Abstract:点击率&#xff08;CTR&#xff09;预测在推荐系统和网络搜索中起着关键作用。虽然许多现有的方法利用集成学习来提高模型性能&#xff0c;但它们通常将集成限制在两个或三个子网络中&#xff0c;很少探索更大的集成。在本文中&#xff0c;我们研究了更大的集成网络&a…

苍穹外卖项目练习总结

做这个练习项目已经接近两年之久&#xff0c;现在拿出来复习一遍&#xff0c;主要就是里面处理问题的流程&#xff0c;以及整体思考的逻辑需要重新回顾一遍&#xff0c;后续会逐渐总结这一段时间以来学习到的知识。 项目整体包含两部分&#xff0c;一个是管理端&#xff0c;一…

数学拯救世界(三)———破魔

题目一&#xff1a; 还记不记得&#xff0c;出现带分数的话可以怎么办&#xff1f; 题目二&#xff1a; 还记不记得&#xff0c;昨天讲的重叠数 题目三&#xff1a; 提公因数&#xff0c;抓住问题本质 题目四&#xff1a;