【发布时间】:2020-02-16 08:15:52
【问题描述】:
我对类方法有点困惑:
考虑以下示例
class A:
number = 0
def add_int_n(n: int) -> int:
return A.number + n
@classmethod
def add_int_m(cls, m: int) -> int:
return cls.number + m
@staticmethod
def add_int_k(cls, k: int) -> int:
return cls.number + k
我注意到前者和最后一个属于function 类,而第二个属于method 类。两者之间的根本区别是什么(如果有的话)?
【问题讨论】:
-
@gst 感谢您指出我的答案。您在使用方法或函数时有什么最佳实践吗?
-
如果您确实需要访问类的实例,请使用实例方法。如果不这样做,请使用静态方法(尽管您应该考虑是否在类外使用常规函数;静态方法实际上只是存在于类名称空间中的函数)。类方法旨在作为替代构造函数;如果
A.foo是一个类方法,那么A(...)和A.foo(...)都应该返回A的实例。
标签: python python-3.x class