我读过了
由于staticmethod
无法访问该类的实例,我不知道它和它有什么区别global function
?
什么时候应该使用staticmethod
?能举个很好的例子吗?
我读过了
由于staticmethod
无法访问该类的实例,我不知道它和它有什么区别global function
?
什么时候应该使用staticmethod
?能举个很好的例子吗?
与全局函数一样,静态方法无法访问包含类的实例。但它在概念上属于包含类。另一个好处是它可以避免名称冲突。
当函数设计为服务于某个给定类时,建议将其作为该类的静态方法。这称为凝聚力。另外,如果这个函数没有在外面使用,你可以在它前面加上下划线来标记它为“私有”,这叫做信息隐藏(尽管Python并不真正支持私有方法)。根据经验,尽可能少地公开接口将使代码更干净且不易更改。
即使该函数应该用作跨多个模块的许多类的共享实用程序,但使其成为全局函数仍然不是首选。考虑将其作为某个实用程序类的静态方法,或者将其作为某个专用模块中的全局函数。这样做的一个原因是将类似用途的函数收集到一个公共类或模块中,这有利于另一个层次的抽象/模块化(对于小型项目,有些人可能会认为这是过度工程)。另一个原因是这可能会减少命名空间污染。
IMO 它更多的是一个设计问题,而不是一个技术问题。如果您觉得逻辑属于一个类(而不是实例),请将其添加为staticmethod
,如果它不相关,则将其作为全局函数实现。
例如:
class Image(object):
@staticmethod
def to_grayscale(pixel):
# ...
海事组织优于
def to_grayscale(pixel):
#...
class Image(object):
# ...
静态方法包含在类中(添加@MartijnPieters 指出的命名空间)。全局函数不是。