在 Python 中使用 @staticmethod 和全局函数有什么区别?

Tan*_*Woo 4 python decorator

我读过了

由于staticmethod无法访问该类的实例,我不知道它和global function?

什么时候应该使用staticmethod?能举个好例子吗?

Hui*_*eng 6

与全局函数一样,静态方法不能访问包含类的实例。但它在概念上属于包含类。另一个好处是可以避免名称冲突。

当函数被设计为为某个给定的类服务时,建议将其作为该类的静态方法。这称为凝聚力。另外,如果这个函数没有在外面使用,你可以在它前面加上下划线来标​​记它为“私有”,这就是所谓的信息隐藏(尽管Python并不真正支持私有方法)。根据经验,尽可能少地暴露接口将使代码更干净,更不容易更改。

即使该函数应该作为跨多个模块的许多类的共享实用程序,但使其成为全局函数仍然不是首选。考虑将其作为某个实用程序类的静态方法,或者使其成为某个专用模块中的全局函数。这样做的一个原因是将类似用途的函数收集到一个公共类或模块中,这对另一个级别的抽象/模块化有好处(对于小项目,有些人可能会认为这是过度工程)。另一个原因是这可能会减少命名空间污染。


Dem*_*cht 0

静态方法包含在类中(添加@MartijnPieters 指出的命名空间)。全局函数则不然。