一、类方法
1、什么是类方法?
类方法是指使用@classmethod修饰的方法,其第一个参数是类本身(而不是类的实例对象)。
2、特点是什么?
类方法的特点是既可以通过类名直接调用,也可以通过类的实例对象调用。
3、类方法示例
1 class Complex: #定义Complex类 2 def __init__(self,real=0,image=0): #定义构造方法 3 self.real=real #初始化一个复数的实部值 4 self.image=image #初始化一个复数的虚部值 5 @classmethod 6 def add(cls,c1,c2): #定义类方法add,实现两个复数的加法运算 7 print(cls) #输出cls 8 c=Complex() #创建Complex类对象c 9 c.real=c1.real+c2.real #实部相加 10 c.image=c1.image+c2.image #虚部相加 11 return c 12 if __name__=='__main__': 13 c1=Complex(1,2.5) 14 c2=Complex(2.2,3.1) 15 c=Complex.add(c1,c2) #直接使用类名调用类方法add 16 print('c1+c2的结果为%.2f+%.2fi'%(c.real,c.image))
<class '__main__.Complex'>
c1+c2的结果为3.20+5.60i
提示:
将第15行的“c=Complex.add(c1,c2) ”改为“c=c1.add(c1, c2) ”或“c=c2.add(c1, c2)”或“c=Complex().add(c1, c2) ”,程序运行后可得到相同的输出结果,即类方法也可以使用实例对象调用。通过“print(cls) ”输出类方法add的第一个参数,从输出结果中可以看到cls是Complex类。
二、静态方法
1、什么是静态方法?
静态方法是指使用@staticmethod修饰的方法。
2、特点是什么?
与类方法相同,静态方法既可以直接通过类名调用,也可以通过类的实例对象调用。
与类方法不同的地方在于,静态方法中没有类方法中的第一个类参数。
3、静态方法代码示例
1 class Complex: #定义Complex类 2 def __init__(self,real=0,image=0): #定义构造方法 3 self.real=real #初始化一个复数的实部值 4 self.image=image #初始化一个复数的虚部值 5 @staticmethod 6 def add(c1,c2): #定义类方法add,实现两个复数的加法运算 7 c=Complex() #创建Complex类对象c 8 c.real=c1.real+c2.real #实部相加 9 c.image=c1.image+c2.image #虚部相加 10 return c 11 if __name__=='__main__': 12 c1=Complex(1,2.5) 13 c2=Complex(2.2,3.1) 14 c=Complex.add(c1,c2) #直接使用类名调用类方法add 15 print('c1+c2的结果为%.2f+%.2fi'%(c.real,c.image))
c1+c2的结果为3.20+5.60i
披荆斩棘,仗剑天涯
分类:
Python
标签:
python—面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通