staticmethod 装饰器似乎毫无意义

staticmethod decorator seems pointless

我在阅读 Python 中的 @staticmethod 时遇到了以下代码:

class MyClass:
    my_var = 0

    @staticmethod
    def static_method():
        MyClass.my_var += 1

我只是不明白为什么你可以写这样的代码...这不是违背了静态方法的目的吗?

我知道还有一个事实是第一个参数不会是 class/instance 引用,但是......如果我仍然可以访问 [=24= 的话,这样调用这个装饰器仍然很奇怪] 变量,没有?

如果我可以访问 class 变量,为什么我读到的所有地方都说我不能,即使我只是清楚地使用了上面的代码?是不是我做错了?

静态方法不能修改 class 状态的想法是基于静态方法不 接收 对 class 作为参数,就像 class 方法一样。但是,在这种情况下,对 class 的引用作为硬编码值提供。

定义静态方法而不是 class 方法的一个原因是保证您修改特定 class 的属性,而不是可能的子 class。

class A:
   my_var = 0

   @classmethod
   def foo(cls):
       cls.my_var += 1

   @staticmethod
   def bar():
       A.my_var += 1


class B(A):
    my_var = 0

调用 B.foo 将修改 B.my_var,而不是 A.my_var。调用 B.bar 将修改 A.my_var.