Python类的属性和方法介绍

news2024/11/23 21:22:48

Python类的属性和方法介绍

本文主要讲python类属性(类变量)、实例属性(实例变量);类方法、静态方法、实例方法。

【定义在类中的变量也称为属性,定义在类中的函数也称为方法。】

这些都是Python面向对象程序设计需要熟知的,关于Python面向对象程序设计基本知识可见https://blog.csdn.net/cnds123/article/details/108354860

类属性

类属性(类变量):定义在类中,并且在方法外的变量。属于类本身而不是类的实例。可以使用类名或者实例名来访问。对于所有的实例来说,类属性的值是相同的,且在类的所有实例中是共享的。

下面给出一个例子,这个例子中定义了一个Professor(教授)类,使用类名或者实例名来访问类属性department(系、部门),代码如下:

#类属性示例
class Professor:
    # 类属性
    department = "Computer Science"

    # 实例属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 访问类属性
print(Professor.department)  # "Computer Science"

# 创建教授对象
prof = Professor("John Smith", 40)
# 访问类属性
print(prof.department)  # "Computer Science"

运行测试:

在上面的代码中,我们使用类名或者实例名来访问类属性department,两种方式都可以得到相同的结果,即"Computer Science"。

实例属性

实例属性(实例变量):在类中方法内通过self.变量名定义的变量。实例属性:属于类的实例,只能通过实例名来访问。对于每个实例来说,实例属性的值是不同的,且在不同实例中是不共享的。下面给出一个示例源码:

#实例属性
class Professor:
    # 类属性
    department = "Computer Science"

    # 实例属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 创建教授对象
prof1 = Professor("John Smith", 40)
prof2 = Professor("Mary Brown", 35)

# 访问实例属性
print(prof1.name)  # "John Smith"
print(prof2.name)  # "Mary Brown"

运行测试:

在上面的代码中,我们创建了两个不同的教授对象prof1和prof2,分别将它们的name属性设置为John Smith和Mary Brown。通过实例名来访问实例属性。

  

下面介绍类中方法。类中方法可以划分为实例方法(普通方法)、类方法和静态方法。

类方法前用@classmethod修饰

静态方法前用@staticmethod修饰

不加任何修饰的就是实例方法(普通方法)

【@classmethod 和 @staticmethod 都是函数装饰器】

类方法

类方法与类本身相关的方法,使用@classmethod装饰器来定义。类方法的第一个参数通常为cls,表示类本身,可以使用类名或者实例名来调用,类方法可以访问和修改类属性,但不能访问实例属性。下面给出一个示例源码:

#类方法示例
class Professor:
    # 类属性
    department = "Computer Science"

    # 实例属性
    def __init__(self, name, age):
        self.name = name
        self.age = age


    # 类方法
    @classmethod
    def change_department(cls, new_dept):
        cls.department = new_dept

# 访问类属性
print(Professor.department)  # "Computer Science"
prof1 = Professor("John Smith", 40)
prof2 = Professor("Jane Doe", 35)
#调用类方法来修改类属性
Professor.change_department("Mathematics")

print(prof1.department)  # Mathematics
print(prof2.department)  # Mathematics

运行测试:

在上面的代码中,我们使用类名调用了change_department类方法,将department类属性的值从"Computer Science"修改为"Mathematics"。可以发现,这个修改是在所有的实例中都生效的。

静态方法

静态方法(staticmethod)与类和实例都没有直接的关联,它们只是存在于类的命名空间中。静态方法是使用@staticmethod装饰器来定义的,它没有默认的参数,也不需要使用cls或self参数。静态方法主要用于与类相关的工具函数,它们没有默认的参数,也不需要使用cls或self参数。在使用时,我们可以使用类名或实例名来调用静态方法,而不需要创建实例对象。静态方法可以访问类属性,但不能访问实例属性,因为它们没有cls或self参数。

静态方法可以使用类名或实例名来调用,两者的效果是一样的。在某些情况下,使用实例名调用静态方法可能更加直观和易于理解。下面给出一个示例源码:

#静态方法示例
class Professor:
    # 类属性
    department = "Computer Science"

    # 实例属性
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.salary = salary

    @staticmethod
    def calculate_salary(salary):
        # 计算教授的工资
        tax_rate = 0.2  # 税率为20%
        tax = salary * tax_rate
        return salary - tax

# 使用类名调用静态方法
salary = Professor.calculate_salary(100000)
print(f"The actual salary is {salary}.")

# 使用实例名调用静态方法
# 创建一个教授实例
professor = Professor("John Smith", 50, 120000)
salary = professor.calculate_salary(120000)
print(f"The actual salary is {salary}.")

运行测试:

在上面的代码中,使用Professor.calculate_salary(100000)来调用静态方法,计算工资为100000的教授的实际工资。接着,创建了一个教授实例professor,然后使用professor.calculate_salary(120000)来调用静态方法,计算该教授的实际工资。由于静态方法不依赖于类的实例,因此我们可以使用实例名或类名来调用该方法,都是允许的。

实例方法

实例方法与类的实例相关的方法,使用类中的方法来定义,第一个参数通常为self,表示调用该方法的实例。只能使用实例名来调用。下面给出一个示例源码:

#实例方法示例
class Professor:
    # 类属性
    department = "Computer Science"

    # 实例属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 实例方法
    def retire(self):
        print(f"{self.name} is retiring.")
        self.age = 65

# 创建教授对象
prof = Professor("John Smith", 40)

# 调用实例方法
prof.retire()  # "John Smith is retiring."
print(prof.age)  # 65

运行测试:

在上面的代码中,我们调用了retire实例方法,将prof对象的age属性从40修改为65。只能使用实例名来调用实例方法。

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

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

相关文章

Sentinel持久化规则

1.什么是持久化规则 一旦我们重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化。 2.怎么玩 将限流配置规则持久化进Nacos保存,只要刷新8401某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos…

Day53【动态规划】1143.最长公共子序列、1035.不相交的线、53.最大子序和

1143.最长公共子序列 力扣题目链接/文章讲解 视频讲解 本题最大的难点还是定义 dp 数组 本题和718.最长重复子数组区别在于这里不要求是连续的了,但要有相对顺序 直接动态规划五部曲! 1、确定 dp 数组下标及值含义 dp[i][j]:取 text1…

Hadoop学习---9、Yarn

1、Yarn资源调度器 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行在于操作系统之上的应用程序。 1.1 Yarn基础架构 Yarn主要由ResourceManager、NodeManag…

MyCat|Shardingsphere-proxy:jdbc连接MySQL8.0.33的query_cache_size异常解决方案

当前版本:MySQL 8.0.33 ,Mycat-server-1.6.7.6-release-20220524173810-win,apache-shardingsphere-5.3.2-shardingsphere-proxy-bin,jdk 1.8 1. 问题的主要背景 MySQL 8.0.33版本,搭建了主从复制,需要借…

24 VueComponent 的 render

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 测试用例如下, 一个简单的 按钮事件的触发 问题的调试 编译…

微软正在研究使 Linux 脚本更安全

导读据悉,微软正在研究使 Linux 脚本更安全 微软正在研究使 Linux 脚本更安全 在本周的 Linux 安全峰会上,systemd 的创建者 Lennart Poettering 发表了演讲,他在过去的一年中被微软雇佣,他和微软的其它工程师们正在努力提高 Lin…

Linux 下进行权限修改 chmod命令

查看权限 ls -l 文件名该命令可以查看文件的详细属性,包括文件的权限 权限含义 -rwxrwxrwx在文件系统中,user、group、others的权限是分开的,第一个rwx代表user的权限、第二个rwx代表group的文件、第三个rwx代表others的权限 字符含义值…

Storm学习笔记

1 Storm是什么 Apache Storm是一个分布式实时流式大数据处理框架。 2 计算框架对比 (1) Storm是在线处理数据方式,Mapreduce/spark是离线处理数据方式。 (2) Mapreduce数据处理特点 海量数据处理:G、T、P级都能处理 全量数据集同时处理&#xff1…

纯js实现在线文字识别,从图片中提取文本信息

当你需要将图片中的文字内容提取出来时,你可能想到了手动输入或者使用OCR技术。而当你需要进行在线文字识别时,一个纯JavaScript实现的OCR工具可能会成为你的优选方案。 纯JavaScript,使得在浏览器内部进行文字识别变得可能。 此外&#x…

chatgpt赋能python:Python文件备份:保障数据安全,高效便捷的备份方案

Python文件备份:保障数据安全,高效便捷的备份方案 在日常工作中,文件备份是保障数据安全的必要措施。Python作为一个强大的编程语言,在文件备份方面有着出色的表现。本文将重点介绍Python文件备份的相关知识。 Python文件备份的…

矿井水深度除氟装置CH-87的技术应用

今天,文章中会谈到的问题是关于煤化工废水深度处理除氟、总氮、砷等污染物工艺技术的拆解分析,用什么样的工艺技术能把矿井水中的氟、砷、总氮做到1个毫克升以下的标准符合达标排放?希望能对相关行业起到一定的帮助作用。我国是一个资源丰富的…

《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD回流焊,开源SDR无线电,汽车级机器人评估板

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程: DSP视频教程第12期:TI开源分享IQmath DSP源码,适用于所有Cortex…

TCP通信流程详解

目录 什么是TCP协议? 三次握手和四次挥手 TCP通信流程: socket(): bind():绑定函数 listen():监听函数 accept():和客户端建立连接 connect():客户端连接服务器函数 read()/recv():读取函数 write() /send():写入函数 close():关闭连接 为什…

第63篇:美国NSA量子注入攻击的流量特征及检测方法

Part1 前言 大家好,我是ABC_123,公众号正式更名为”希潭实验室”,敬请关注。前不久花时间研究了美国NSA的量子注入攻击手法,并在Hackingclub山东济南站技术沙龙做了分享。对于这种攻击手法部分网友嗤之以鼻,认为是老美…

Linux下的进程状态和 僵尸/孤儿进程的区别

目录 Linux进程的各种状态的表示: R状态的测验: S状态的测验: T状态的测验: 这次讲解一个新指令:kill -l t状态测验:追踪暂停 X状态:死亡状态 Z状态:僵尸状态 进程一直处于…

过孔焊盘~尺寸、间隙、通流能力

过孔焊盘 导通孔(via)焊盘尺寸 a) 外层焊盘环宽(A)要大于5mil,内层焊盘环宽(A)要大于8mil, 推荐导通孔孔径及焊盘尺寸如下: b) 推荐反焊盘大小尺寸≥过孔焊盘+20MIL。 走线与金属化孔间的最小间隙 推荐的走线距金属…

Roblox 不但不支持 Linux,还屏蔽了 Wine

导读据悉,Roblox 不但不支持 Linux,还屏蔽了 Wine。 Roblox 不但不支持 Linux,还屏蔽了 Wine 多人游戏 Roblox 没有 Linux 原生版本,但之前可以通过 Wine 在 Linux 上运行。不过其最新的反作弊软件专门屏蔽了 Wine 应用&#xff…

XuperChain共建守护者系列藏品震撼发行,最新合成玩法揭秘

5月30日上午10点,百度超级链重磅推出「XuperChain共建守护者系列」藏品。「XuperChain共建守护者徽章系列」自身具有权益,也可与共建徽章系列藏品合成新藏品,玩法多多、福利多多,等你探索! 共建守护者系列共计20款藏品…

智能集成接口:I3 ISA-95 的应用

介绍 多年来,使用基于制造运营管理 (MOM) 的应用程序的制造 IT 顾问试图说服制造商这些类型的应用的高价值。实时 MOM 解决方案是唯一一组能够精确优化工厂日常运营的 IT 应用程序,可为其可用性流程带来可创造的价值,…

《操作系统》期末客观题梳理

《操作系统》复习(1-9) 文章目录 《操作系统》复习(1-9)Ⅰ知识点概念第一章操作系统导论第二章进程描述与控制第三章处理机调度死锁第四章进程同步第五章存储器管理第六章虚拟存储器第七章输入输出系统第八章文件管理第九章磁盘存…