百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python3.0中普通方法、类方法和静态方法的比较

off999 2024-09-20 22:50 51 浏览 0 评论

一、语法区别

刚接触Python中的面向对象,对于类方法和静态方法难以区分,通过查找知乎、CSDN论坛,废了好大的劲思路才逐渐明朗,所以就总结顺便分享一下。

首先开始编辑代码

[html] view plain copy

  1. # 普通方法、类方法、静态方法的比较
  2. # 普通方法、类方法、静态方法的比较
  3. class Test:
  4. # 定义类Test的属性
  5. name = 'python'
  6. content = '人生苦短,我用python!'
  7. def normal_method(self): # 普通方法访问类Text的属性
  8. print(self.content)
  9. @classmethod #类方法访问Test类的属性,看到@staticmethod我们就知道这个方法并不需要依赖对象本身的状态
  10. def class_method(cls):
  11. print(cls.content)
  12. @staticmethod #静态方法,无法访问Test类的属性,
  13. def static_method():
  14. print('content')

进行测试一

[html] view plain copy

  1. t = Test()
  2. t.content = '人生苦短,及时行乐'#设置对象t的属性
  3. t.normal_method()
  4. t.class_method()
  5. t.static_method()
  6. # 结果
  7. 人生苦短,及时行乐
  8. 人生苦短,我用python!
  9. content

使用普通方法、类方法和静态方法都可以通过对象(t)进行调用,但是静态方法和类方法无法访问对象的属性,所以更改对象(t)的属性仅仅只是对普通方法起作用。

进行测试二

[html] view plain copy

  1. # Test.content('name')出现错误,普通方法无法通过类调用
  2. Test.class_method()
  3. Test.static_method()
  4. # 结果
  5. 人生苦短,我用python!
  6. content

普通方法无法通过类名调用,但静态方法和类方法是可以的。

总结

三种方法都可以通过对象进行调用,但类方法和静态方法无法访问对象属性,类方法通过对象调用获取的仍是类属性(并非对象属性);普通方法无法通过类名调用,类方法和静态方法可以,但静态方法不能进行访问,仅仅只是通过传值得方式(与函数调用相同)

二、简单应用

通过上面的示例仅仅只是知道三种方法的语法区别,下面继续看看三种方法的具体应用区别

示例:用类来实现部分计算器功能,并计算任意两个整数的平方和

1.普通方法

[html] view plain copy

  1. class Test:
  2. def __init__(self, num1, num2):
  3. self.num1 = num1
  4. self.num2 = num2
  5. def plus(self):
  6. result = self.num1 + self.num2
  7. return result
  8. def multiply(self):
  9. result = self.num1 * self.num2
  10. return result
  11. t1 = Test(3, 3)
  12. m = t1.multiply()
  13. t2 = Test(4, 4)
  14. n = t2.multiply()
  15. t3 =Test(m, n)
  16. sum = t3.plus()
  17. print(sum)

2.类方法(@classnethod)

[html] view plain copy

  1. class Test:
  2. def __init__(self, num1, num2):
  3. self.num1 = num1
  4. self.num2 = num2
  5. def plus(self):
  6. result = self.num1 + self.num2
  7. return result
  8. def multiply(self):
  9. result = self.num1 * self.num2
  10. return result
  11. @classmethod
  12. def sum(cls, num1, num2):
  13. t1 = Test(3, 3)
  14. m = t1.multiply()
  15. t2 = Test(4, 4)
  16. n = t2.multiply()
  17. t3 = Test(m, n)
  18. print(t3.plus())
  19. Test.sum(3, 4)

3.静态方法(@staticmethod)

[html] view plain copy

  1. class Test:
  2. def __init__(self, num1, num2):
  3. self.num1 = num1
  4. self.num2 = num2
  5. def plus(self):
  6. result = self.num1 + self.num2
  7. return result
  8. def multiply(self):
  9. result = self.num1 * self.num2
  10. return result
  11. @staticmethod
  12. def sum(num1, num2):
  13. s = num1 * num1 + num2 * num2
  14. print(s)
  15. Test.sum(3, 4)

4.总结

以上三种方法都能实现示例要求的功能。使用类方法时,求和功能的那部分代码并没有放在类(Test)中,而是作为类的一个成员方法,这样的好处是可以简化对象,增加可读性(直接通过参数num1、num2来实现最终功能),但整个过程仍须类(self)参与;使用静态方法时,仅仅需要通过传递两个参数即可实现,单最终结果仍可作为类方法进行访问。

5.延伸

@classmethod装饰(类方法): 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。

@staticmethod装饰(静态方法):经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法。 比如更改环境变量或者修改其他类的属性等能用到静态方法。这种情况可以直接用函数解决,但这样同样会扩散类内部的代码,造成维护困难。至于静态方法就是写在类里的方法,必须用类来调用(极少数情况下使用,一般都在全局里直接写函数了)。

?后记:对于大部分转行的人来说,找机会把自己的基础知识补齐,边工作边补基础知识,真心很重要。"我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

相关推荐

u盘不显示文件夹(u盘不显示文件夹但是有内存)

如果您的U盘不显示文件夹,可能是由于文件夹被隐藏或损坏造成的。您可以通过以下方法解决此问题:首先,打开文件管理器,点击"查看"选项卡,勾选"隐藏文件",然后查看U盘根目...

电脑自带磁盘分区工具(磁盘分区工具在哪里)

1、右击我的电脑,选择“管理”。2、接着,在计算机管理界面选择“存储——磁盘管理”3、接着系统会自动的查询压缩空间,然后选择选择好需要压缩空间的大小。接着点击“压缩”4、等待系统自动将磁盘空间压...

win10激活密钥永久(win10激活密钥永久正版企业版最新)

要获得Windows10专业版永久激活密钥,可以通过微软官方零售渠道或可靠的第三方卖家购买正版产品密钥。使用第三方卖家时,务必注意其信誉和真实性。激活后,密钥将与您的Microsoft帐户关...

wlan不可上网怎么办(wlan显示不可上网怎么回事)

当wlan不能上网时,可以尝试以下解决方案:1.检查路由器或无线网络设备是否正常运作,确保其连接和配置正确。2.检查电脑或移动设备是否连接到正确的无线网络,并确保输入正确的密码。3.尝试重新启动...

ip地址是什么(腾达路由器的ip地址是什么)

IP地址:IP是英文InternetProtocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。我们可以把ip地址类比成电话号码。扫地[sǎodì]&...

win10 1703版本(window10 1703版本)

windows的版本是这样排序的:17为2017年,03为3月,所以此版本为2017年3月更新的版本。微软加入了不少新的功能:增强了Edge浏览器的稳定性。额外的安全和隐私保护。游戏模式更加稳定。日历...

tplink路由器用户名(tplink路由器用户名和密码)

tp-link无线路由器的WiFi默认为TP-LINK_XXXX(XXXX为4位英文和数字组合)。查看tp-link无线路由器ID的方法如下:1、打开电脑浏览器,在地址栏中输入“192.168.0.1...

如何安装windows10家庭版(如何安装windows 10家庭版)

Windows10家庭版可以安装鲁大师。鲁大师是一款软件,可以用于检测电脑的系统效果和状态。然而,有人认为鲁大师被360收购后出现了很多问题,如难卸载、弹窗不断等。因此,是否需要安装鲁大师,还需要根据...

虚拟机安装win7镜像(虚拟机安装win7镜像软件)

下载VMware虚拟机win7映像文件,您可以选择官方或授权的渠道进行操作。首先,您需要确认需要下载的虚拟机镜像的操作系统和版本。通常,官方提供了一些预定义的虚拟机镜像,如Windows7等。一种可...

cpu温度过高会怎样(cpu温度过高会造成什么影响)

CPU温度过高会导致一系列问题,包括但不限于以下几个方面:1.电脑运行不稳定:CPU温度过高会导致电脑运行不稳定,程序崩溃、电脑反应缓慢等问题。2.电脑硬件损坏:CPU温度过高容易导致电脑硬件损坏...

win7进安全模式(win7进安全模式卡死)

1、重启或开机时,在进入Windows系统启动画面之前按下F8键,会出现系统多操作启动菜单,有三个版本的安全模式可以选择,回车就直接进入安全模式。2、重启电脑时,按住Ctrl键不放,会出现系统多操作启...

360手机助手下载的软件在哪里

在手机中打开安装好的360手机应用助手然后在360手机应用助手界面的右下角,选择“更多”,然后在这里再进入“设置”进入设置后,再选择“应用安装位置”设置最后我们选择SD卡即可根据以上步骤,就可以修改下...

组策略管理器怎么打开(组策略管理器怎么打开控制面板)

1.找不到2.本地组策略管理器可能找不到是因为它可能被禁用或者被删除了。另外,也有可能是因为你的操作系统版本不支持本地组策略管理器。3.如果你的操作系统版本不支持本地组策略管理器,你可以尝试使用...

电源已接通未充电什么意思(电源已接通但未充电怎么办)

原因分析:出现这样的原因有可能是长时间没有充电,导致电池的内部电量耗完后亏电严重,只是电脑充电的保护,不让过充而已,只要设置一下电池选项一般就可以解决问题了。解决方法:1、关机,拔下电源,拔出电池,...

路由器怎么桥接另外一个路由器

桥接分有线桥接和无线桥接,有线桥接就是两台路由器lan口通过网线相连,实现路由器的扩展;无线桥接是将后一台路由器工作模式设置为中继模式,在中继模式设置中选择前一台路由的WiFi信号,输入对应的密码,就...

取消回复欢迎 发表评论: