九歌当下 发表于 2023-8-30 10:16:36

静态方法的作用是什么

没有静态方法
class C:
    def func():
      print("I love FishC")
      
C.func()
I love FishC


有静态方法
class C:
    @staticmethod
    def func():
      print("I love FishC")
   
C.func()
I love FishC

无论有没有静态方法,类都可以直接访问其方法,静态方法是起什么作用的

isdkz 发表于 2023-8-30 10:17:07

静态方法的作用是允许类直接调用方法,而不需要创建类的实例。在没有静态方法的情况下,我们需要先创建类的实例,然后通过实例来调用方法。而有了静态方法后,我们可以直接通过类名来调用方法,提高了代码的简洁性和可读性。

在给定的示例中,当没有静态方法时,我们需要先创建类C的实例,然后通过实例来调用func()方法。而当有了静态方法后,我们可以直接使用类名C来调用func()方法,不需要创建实例。

静态方法通常用于不需要访问实例属性或实例方法的情况下,执行与类相关的操作。它们可以被视为类的工具函数,与类的实例无关。静态方法可以帮助我们组织代码,使得相关的功能逻辑集中在类中。

需要注意的是,静态方法不能访问类的实例属性或实例方法,因为它们不与任何特定的实例相关联。因此,静态方法通常用于不需要访问实例状态的情况下。

九歌当下 发表于 2023-8-30 10:18:36

{:10_249:}GPT好像不怎么靠谱

isdkz 发表于 2023-8-30 10:38:04

本帖最后由 isdkz 于 2023-8-30 10:40 编辑



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

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



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


不管是通过类还是实例来去调用,它都自动传入了类对象

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


页: [1]
查看完整版本: 静态方法的作用是什么