我想知道关于类和静态方法的最佳实践是什么。
考虑以下课程
class A:
number = 0
@classmethod
def add_int_m(cls, m: int) -> int:
return cls.number + m
@staticmethod
def add_int_k(k: int) -> int:
return A.number + k
两者给出的结果相同,但是一种方法优先于另一种方法吗?
答案 0 :(得分:2)
如果您使用的是类变量,则肯定要使用@classmethod,而不要使用@staticmethod。想象一下,B类扩展了A类:
class A:
number = 0
@classmethod
def add_int_m(cls, m: int) -> int:
return cls.number + m
@staticmethod
def add_int_k(k: int) -> int:
return A.number + k
class B(A):
pass
B.number = 10
B.add_int_m(1) # returns 11
B.add_int_k(1) # returns 1
静态方法add_int_k仍使用类A的变量。