4

我读过了

由于staticmethod无法访问该类的实例,我不知道它和它有什么区别global function

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

4

3 回答 3

6

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

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

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

于 2013-02-20T09:19:06.060 回答
0

IMO 它更多的是一个设计问题,而不是一个技术问题。如果您觉得逻辑属于一个类(而不是实例),请将其添加为staticmethod,如果它不相关,则将其作为全局函数实现。

例如:

class Image(object):
    @staticmethod
    def to_grayscale(pixel):
        # ...

海事组织优于

def to_grayscale(pixel):
    #...

class Image(object):
    # ...
于 2013-02-20T09:21:46.413 回答
0

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

于 2013-02-20T09:15:53.843 回答