Python类的属性和方法介绍

news/2024/9/23 9:26:57/

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 = nameself.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 = nameself.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 = nameself.age = age# 类方法@classmethoddef 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 = nameself.age = ageself.salary = salary@staticmethoddef calculate_salary(salary):# 计算教授的工资tax_rate = 0.2  # 税率为20%tax = salary * tax_ratereturn 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 = nameself.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.ppmy.cn/news/93967.html

相关文章

Linux 软件包管理工具

rpm命令管理软件包 1.学会看rpm包,通过rpm包的名字来了解这个软件包的一些基础信息xfsprogs-4.19.0-2.el8.x86_64.rpm xfsprogs 软件名字 4.19.0 版本号 2 发行次数 el8 适用于哪个操作系统(rel8) x86_64 软…

计算Yocto中LIC_FILES_CHKSUM的md5值

md5网站 https://emn178.github.io/online-tools/md5_checksum.html 将源码中的LICENCE文件丢进去。 LIC_FILES_CHKSUM值的语法如下: LIC_FILES_CHKSUM " file:// license_info_location ;md5 md5_value " license_info_location 这是包含您的许可证信…

STM8使用pwm接口调试GDS06灰尘传感器

背景 刚好有项目使用GDS06这款传感器,这里简单做个记录。 GDS06接口如下,这里支持串口和PWM的输出到MCU,由于项目采用STM8S003F3P6,资源极其有限。 所以硬件设计的时候,就考虑采用PWM的接口方式,这样只是…

【数学建模】矩形桌子能放平(初等模型)

把一把四只脚的椅子往不平的地面上一放,通常只有三只脚着地,放不稳,然而只要稍挪动几次,就可以四脚着地,放稳了。如何解释这种现象? 1 模型假设 椅子四条腿一样长,椅脚与地面接触可视为一个点&…

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

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

ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)

文章目录 1.rgb、depth相机标定矫正1.1.标定rgb相机1.2.标定depth相机1.3.rgb、depth相机一起标定(效果重复了,但是推荐使用)1.4.取得标定结果1.4.1.得到的标定结果的意义 1.5.IR、RGB相机分别应用标定结果1.5.1.openCV应用标定结果1.5.2.ros…

【Netty】Netty 编码器(十三)

文章目录 前言一、MessageToByteEncoder 抽象类二、MessageToMessageEncoder 抽象类总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHan…

WordPress判断当前页是否为首页的方法

在WordPress建站中,可以利用is_home()判断当前页是否为首页,如果不起作用,大致有如下两个常见原因: 第一种 当你的首页不是默认的index.php的时候,而是在后台指定了一个page页面。这种情况下is_home()会失效&#xf…