Python 类属性和类方法

【网络与爬虫 44】Canvas指纹伪造技术:突破浏览器图形渲染检测的终极指南 Canvas和WebGL指纹是现代反爬虫系统中最难绕过的检测技术之一,它们通过分析浏览器图形渲染的细微差异来识别用户设备。本文将深入解析Canvas和WebGL指纹的工作原理,探讨其在反爬虫检测中的应用,并提供多种有效的伪造和绕过策略,帮助开发者理解并应对这些高级检测技术。 阅读详情

类属性和类方法

目标

  • 类的结构
  • 类属性和实例属性
  • 类方法和静态方法

01. 类的结构

1.1 术语 —— 实例

  1. 使用面相对象开发,第 1 步 是设计 类
  2. 使用 类名() 创建对象,创建对象 的动作有两步:
    1. 在内存中为对象 分配空间
    2. 调用初始化方法 __init__ 为 对象初始化
  3. 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例



因此,通常也会把:

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

在程序执行时:

  1. 对象各自拥有自己的 实例属性
  2. 调用对象方法,可以通过 self.
    • 访问自己的属性
    • 调用自己的方法

结论

  • 每一个对象 都有自己 独立的内存空间,保存各自不同的属性
  • 多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用 传递到方法内部

1.2 类是一个特殊的对象

Python 中 一切皆对象:

  • class AAA: 定义的类属于 类对象
  • obj1 = AAA() 属于 实例对象
  • 在程序运行时,类 同样 会被加载到内存
  • 在 Python 中,类 是一个特殊的对象 —— 类对象
  • 在程序运行时,类对象 在内存中 只有一份,使用 一个类 可以创建出 很多个对象实例
  • 除了封装 实例 的 属性 和 方法外,类对象 还可以拥有自己的 属性 和 方法
    1. 类属性
    2. 类方法
  • 通过 类名. 的方式可以 访问类的属性 或者 调用类的方法


02. 类属性和实例属性

2.1 概念和使用

  • 类属性 就是给 类对象 中定义的 属性
  • 通常用来记录 与这个类相关 的特征
  • 类属性 不会用于记录 具体对象的特征

示例需求

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



class Tool(object):

    # 使用赋值语句,定义类属性,记录创建工具对象的总数
    count = 0

    def __init__(self, name):
        self.name = name

        # 针对类属性做一个计数+1
        Tool.count += 1


# 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("铁锹")

# 知道使用 Tool 类到底创建了多少个对象?
print("现在创建了 %d 个工具" % Tool.count)

2.2 属性的获取机制(科普)

  • 在 Python 中 属性的获取 存在一个 向上查找机制



  • 因此,要访问类属性有两种方式:
    1. 类名.类属性
    2. 对象.类属性 (不推荐)

注意

  • 如果使用 对象.类属性 = 值 赋值语句,只会 给对象添加一个属性,而不会影响到 类属性的值

03. 类方法和静态方法

3.1 类方法

  • 类属性 就是针对 类对象 定义的属性
    • 使用 赋值语句 在 class 关键字下方可以定义 类属性
    • 类属性 用于记录 与这个类相关 的特征
  • 类方法 就是针对 类对象 定义的方法
    • 在 类方法 内部可以直接访问 类属性 或者调用其他的 类方法

语法如下

@classmethod
def 类方法名(cls):
    pass
  • 类方法需要用 修饰器 @classmethod 来标识,告诉解释器这是一个类方法
  • 类方法的 第一个参数 应该是 cls
    • 由 哪一个类 调用的方法,方法内的 cls 就是 哪一个类的引用
    • 这个参数和 实例方法 的第一个参数是 self 类似
    • 提示 使用其他名称也可以,不过习惯使用 cls
  • 通过 类名. 调用 类方法,调用方法时,不需要传递 cls 参数
  • 在方法内部
    • 可以通过 cls. 访问类的属性
    • 也可以通过 cls. 调用其他的类方法

示例需求

  • 定义一个 工具类
  • 每件工具都有自己的 name
  • 需求 —— 在 类 封装一个 show_tool_count 的类方法,输出使用当前这个类,创建的对象个数



@classmethod
def show_tool_count(cls):
    """显示工具对象的总数"""
    print("工具对象的总数 %d" % cls.count)

在类方法内部,可以直接使用 cls 访问 类属性 或者 调用类方法

3.2 静态方法

  • 在开发时,如果需要在 类 中封装一个方法,这个方法:

    • 既 不需要 访问 实例属性 或者调用 实例方法
    • 也 不需要 访问 类属性 或者调用 类方法
  • 这个时候,可以把这个方法封装成一个 静态方法

语法如下

@staticmethod
def 静态方法名():
    pass
  • 静态方法 需要用 修饰器 @staticmethod 来标识,告诉解释器这是一个静态方法
  • 通过 类名. 调用 静态方法
    class Dog(object):
        
        # 狗对象计数
        dog_count = 0
        
        @staticmethod
        def run():
            
            # 不需要访问实例属性也不需要访问类属性的方法
            print("狗在跑...")
    
        def __init__(self, name):
            self.name = name
            

3.3 方法综合案例

需求

  1. 设计一个 Game 类
  2. 属性:
    • 定义一个 类属性 top_score 记录游戏的 历史最高分
    • 定义一个 实例属性 player_name 记录 当前游戏的玩家姓名
  3. 方法:
    • 静态方法 show_help 显示游戏帮助信息
    • 类方法 show_top_score 显示历史最高分
    • 实例方法 start_game 开始当前玩家的游戏
  4. 主程序步骤
    • 查看帮助信息
    • 查看历史最高分
    • 创建游戏对象,开始游戏



案例小结
  1. 实例方法 —— 方法内部需要访问 实例属性
    • 实例方法 内部可以使用 类名. 访问类属性
  2. 类方法 —— 方法内部 只 需要访问 类属性
  3. 静态方法 —— 方法内部,不需要访问 实例属性 和 类属性

提问

如果方法内部 即需要访问 实例属性,又需要访问 类属性,应该定义成什么方法?

答案

  • 应该定义 实例方法
  • 因为,类只有一个,在 实例方法 内部可以使用 类名. 访问类属性
    class Game(object):
    
        # 游戏最高分,类属性
        top_score = 0
    
        @staticmethod
        def show_help():
            print("帮助信息:让僵尸走进房间")
            
        @classmethod
        def show_top_score(cls):
            print("游戏最高分是 %d" % cls.top_score)
    
        def __init__(self, player_name):
            self.player_name = player_name
    
        def start_game(self):
            print("[%s] 开始游戏..." % self.player_name)
            
            # 使用类名.修改历史最高分
            Game.top_score = 999
    
    # 1. 查看游戏帮助
    Game.show_help()
    
    # 2. 查看游戏最高分
    Game.show_top_score()
    
    # 3. 创建游戏对象,开始游戏
    game = Game("小明")
    
    game.start_game()
    
    # 4. 游戏结束,查看游戏最高分
    Game.show_top_score()
【Flutter 问题系列第 16 篇】如何防止软键盘弹出后顶掉内容 Flutter 如何防止软键盘弹出后顶掉内容 阅读详情

相关推荐

惊呆了!Oracle 11g从入门到放弃的保姆级指南(新手必看)

本文为Oracle 11g数据库新手提供了一份详尽的入门指南。内容涵盖从安装配置、SQL*Plus工具使用、核心的SQL增删改查操作,到事务、索引等进阶概念的解析。文章旨在帮助初学者避开常见陷阱,快速掌握这一经典关系型数据库管理系统的基本操作与核心技能,实现从入门到上手。

ooo22的博客 265

类的定义及类中属性的访问

!!!类的定义备忘录 类与对象的关系:类是对象的抽象,对象是类的具体体现 类的简单定义及对象的访问: class myself(): name = '小白' sex = 'man' hobby = 'coding' def introduce(self): print('大家好,我是%s'%self.name) pre = myself() prin...

是小白呢的博客 1131

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

C++57个入门知识点_49 多重继承与组合(一个类同时具有多个类的属性的方法:多重继承或者组合;多重继承:一个类同时继承多个类;多重继承构造和析构的顺序与普通继承类似;组合:类中包含多个成员对象)

如果想要一个类同时具有两个类的属性,有两种方法可以选择,一个是多重继承,一个是组合,但由于继承可能导致一些问题,因此较为推荐的是组合的方法实现。 1.多重继承与组合 (1)多重继承 多重继承的写法如下: //某一个类既有沙发又有床的特点 //多重继承 class CSofaBed :public CSofa, public CBed { public: CSofaBed() { printf("CSofaBed()\r\n"); } ~CSofaBed() { printf("~CSofaBe

分享学习成长历程,Winter is coming! 1209

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1002

面向对象——方法、属性、继承

面向对象是一种编程思想,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。

weixin_50517509的博客 358

WordPress搭建“外贸独立站”完整操作教程

  以往的文章,我们介绍了很多种搭建独立站的方式,有最省事的Shopify 、最专业的Magento以及最省钱的Wordpress Woocommerce。其中,通过主机托管的方式又分了免费的谷歌云vps主机、1美元Godaddy主机以及SiteGround共享主机三种。建站方法方式实在太多了,有免费的,有廉价的,有商业版的,有共享主机、有云主机主机以及各种各样的vps服务器,选择哪种方式,哪款主机,也只有真正试了才直到。   没错,上述的这些方法方式,无一例外,我都亲身折腾过。从个人实际需求和建站方式来

www25qi的博客 8077

定义类,属性,方法的格式

定义类的步骤: 1,定义类名; 2,编写类的属性; 3,编写类的方法; public class HelloWorld{ public static void main{ //定义类名 public class 类名{ //定义属性部分(成员变量) 属性1的数据类型 属性1; 属性2的数据类型 属性2; 。。。 属性n的类型 属性n; //定义方法部分

hv102的博客 847

MicroPython学习:在STM32上进行移植

本文将介绍如何在STM32上移植MicroPython,并提供相应的源代码。通过以上步骤,你已经成功地将MicroPython移植到STM32上,并可以使用MicroPython语言编写和运行代码。你可以进一步探索MicroPython的功能和API,以利用STM32的各种外设和功能。使用STM32CubeProgrammer或其他适当的烧录工具,将编译生成的MicroPython固件烧录到STM32微控制器中。打开该文件,并根据你的STM32微控制器类型进行必要的配置更改。模块来控制STM32的LED。

JeeVue的博客 1237

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1703

python入门(8)面向对象 :类、对象、属性与方法

当我们谈论Python的面向对象思想时,主要指的是Python中的类和对象的概念以及与之相关的特性和原则。面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它将程序中的数据和操作数据的方法组织在一起,形成对象,通过对象之间的交互来实现程序的功能。在Python中,面向对象编程主要围绕以下几个核心概念展开:(1):类是面向对象编程的基础,它是一种自定义的数据类型,用于描述对象的属性和行为。

喜欢历史的码农 6416

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 133

Python类属性、类方法和静态方法

Python类属性、类方法和静态方法 在Python中,一切皆对象。通过类创建出来的对象是实例对象,类本身也是对象,称为类对象。 一、类属性 对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称为实例属性。 类对象所拥有的属性叫类属性,它被该类的所有实例对象所共有。类属性可以使用类对象或实例对象访问。 class House(object): price = 'high...

weixin_43790276的博客 4169

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python 类属性和类方法

类属性和类方法是Python实现面向对象编程中“类级别”操作的关键工具。类属性用于在类的所有实例间共享数据,而类方法则为操作这些共享数据、管理类生命周期(如创建实例)提供了途径。明确数据归属:需要所有实例共享的数据定义为类属性;描述实例个体特征的数据定义为实例属性。优先通过类名访问:访问或修改类属性时,尽量使用,以避免通过实例访问可能引发的歧义。善用类方法:当你的方法逻辑不需要访问任何实例属性 (self),但需要知晓或操作类本身 (cls) 时,就应定义为类方法。区分类方法与静态方法。

xingzhemengyou1的博客 563

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python类属性和类方法

classmethod def 类方法名(cls): pass。在类方法内部,可以直接使用。如果方法内部 即需要访问。—— 方法内部需要访问。,应该定义成什么方法?对象.类属性 = 值。

m0_71804489的博客 942

Python中类属性和类方法

_init__结论。

酒酿小圆子呀~ 1461

Python 类属性和类方法 day 07 pm

类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 在内存中为对象 分配空间 调用初始化方法 init 为 对象初始化 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 因此,通常也会把: 创建出来的 对象 叫做 类 的 实例...

龙龙的博客 192

13Python类属性和类方法

_init__在程序执行时:对象各自拥有自己的调用对象方法,可以通过self.

dotnethello的博客 809

Python之 类属性和类方法

类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 在内存中为对象 分配空间 调用初始化方法 init 为 对象初始化 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 017_类的结构示意图I 因此,通常也会把: 创建出来的...

qq_43688472的博客 361

定义一个属性_python 类属性和类方法

目标类的结构类属性和实例属性类方法和静态方法01. 类的结构1.1 术语 —— 实例使用面相对象开发,第 1 步 是设计 类使用 类名() 创建对象,创建对象 的动作有两步:在内存中为对象 分配空间调用初始化方法 init 为 对象初始化对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例因此,通常也会把:创建出来的 对象 叫做 类 的 实例创建对象的 动作 叫做 实例化对象的属性 ...

weixin_39594312的博客 675

27python_类属性和类方法

类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 在内存中为对象 分配空间 调用初始化方法 __init__ 为 对象初始化 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DoaPLRyF-1629506627852)(med

weixin_44785193的博客 182

【Python】类属性和类方法

一、设置和访问类属性 定义 class Dog(): tooth = 50 #定义公有类属性 __teeth = 40 #定义私有类属性 wangcai = Dog() Dog.tooth print(wangcai.tooth) 类属性有点:1.记录的某项数据始终保持一致时,则定义类属性。 2.实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占一份内存,更加节省内存空间。 二、修改类属性 cla...

CNSamRol的博客 1603

Python类属性和类方法详解

定义和访问类属性

quietbxj的博客 404

【Python】—— 多态,类属性和类方法

多态,类属性和类方法详解

m0_56069910的博客 843

[转载] Python类属性、类方法和静态方法

参考链接: Python中的类方法与静态方法 Python类属性、类方法和静态方法 在Python中,一切皆对象。通过类创建出来的对象是实例对象,类本身也是对象,称为类对象。 一、类属性 对象都有属性,我们常说的对象属性是实例对象拥有的属性,又称为实例属性。 类对象所拥有的属性叫类属性,它被该类的所有实例对象所共有。类属性可以使用类对象或实例对象访问。 class House(object): price = 'high' print(House.pric...

u013946150的博客 75

python类方法和类属性

# 类属性,定义在类里面,方法的外面,不需要实例化类就可以直接使用 # 调用的时候使用 类.属性名 class dog: name = '哈士奇:汪!' #类属性定义,不需要self关键字,类似于定义变量 def __init__(self): pass print(dog.name) #调用类属性,不需要实例化可以直接调用 dog.name = '秋田:汪!' #类属性赋值 print(dog.name) # *****************************.

weixin_47130726的博客 420
上一篇: 工作使用git
下一篇: Python单例设计模式
GhostintheCode
博客等级 码龄8年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值