鱼C论坛

 找回密码
 立即注册
查看: 4741|回复: 3

[已解决]静态方法的作用是什么

[复制链接]
发表于 2023-8-30 10:16:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
没有静态方法
  1. class C:
  2.     def func():
  3.         print("I love FishC")
  4.       
  5. C.func()
  6. I love FishC
复制代码


有静态方法
  1. class C:
  2.     @staticmethod
  3.     def func():
  4.         print("I love FishC")
  5.    
  6. C.func()
  7. I love FishC
复制代码


无论有没有静态方法,类都可以直接访问其方法,静态方法是起什么作用的
最佳答案
2023-8-30 10:38:04
本帖最后由 isdkz 于 2023-8-30 10:40 编辑

(, 下载次数: 0)

从这张图中我们可以看到,普通函数的类型为 function

默认定义的方法(不加任何修饰器)为实例方法
实例方法只有在通过实例去调用的时候类型才为 bound method,而其它情况下为 function
Bound method 可以说是 python 本身对函数(function)的一个封装
它会自动帮你把所属对象(包括类对象和实例对象)作为第一个参数传入,所属对象即 of 后面尖括号内包含的内容,bound method 的特殊之处除此之外无他,
如代码中,实例方法 test_im 会将 (, 下载次数: 0) 作为第一参数自动传入。


(, 下载次数: 0)

通过 classmethod 修饰的方法将会成为类方法,类方法不管是通过类还是通过实例调用,该方法类型都为 bound method,只不过此 bound method 非彼 bound method,
通过我的第一张图你可以看出来,它属于类对象,而不是实例对象 (, 下载次数: 0)

(, 下载次数: 0)
不管是通过类还是实例来去调用,它都自动传入了类对象 (, 下载次数: 0)

通过 staticmethod 修饰的方法则是不管何时何地它都只会是 function,
function 就跟一个普普通通的函数一样的职能,也就是说它并不会自动传入任何参数
(, 下载次数: 0)

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-8-30 10:18:36 | 显示全部楼层
GPT好像不怎么靠谱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 14:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表