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
.
我在阅读 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
.