Python 包含所有静态方法的类

Python 包含所有静态方法的类,python,python-3.x,Python,Python 3.x,我有一个python类,所有方法都是静态的 class SomeClass: @staticmethod def somemethod(...): pass @staticmethod def somemethod2(...): pass @staticmethod def somemethod3(...): pass 这是正确的方法吗?如果所有方法都是静态的,则不需要类 (如果类只有init和1个

我有一个python类,所有方法都是静态的

class SomeClass:

    @staticmethod
    def somemethod(...):
       pass

    @staticmethod
    def somemethod2(...):
       pass

    @staticmethod
    def somemethod3(...):
       pass

这是正确的方法吗?

如果所有方法都是静态的,则不需要类

(如果类只有init和1个方法,则相同)

某个班级 然后你使用它的方式主要是:

from someclass import SomeClass
some_class = SomeClass()
some_class.somemethod()
....
我总是将此类类重构为简单的方法 某个班级 然后我这样使用它:

import someclass
someclass.somemethod()
...
这不是更干净更简单吗

额外信息
描述的案例过于笼统,无法给出确切的配方。在这里,仅依赖于示例常规函数比依赖于decorator和类的复杂性看起来更好

def somemethod():
   pass

def somemethod2():
   pass

def somemethod3():
   pass

当然,您可以将其重构为函数。但这并不重要。这应该是“我应该只是一个模块”静态方法在Python中并不常见,而一个只有静态方法的Python类对我来说似乎很奇怪——Python不是Java,在Python中盲目复制Java模式往往会产生丑陋、臃肿的代码。为什么不把它们变成在模块级定义的普通函数呢?您可以将它们放入各自的模块中,以便将它们组合在一起。@PM2Ring它可能会增加模块的数量,每个模块只有两个或三个functions@GrizzledSquirrel你有两种可能的结果。要么你承认这应该是一个模块——或者至少不是一门课,要么我们将其作为“主要基于观点”来结束——“许多好的问题都会根据专家经验产生一定程度的观点,但对这个问题的回答往往几乎完全基于观点,而不是事实、参考资料或具体的专业知识。”这是正确的,唯一的诡辩是因为OP的类只有静态方法,您永远不会实例化它;他们只会使用
SomeClass.somemethod()
。同意,但大多数时候我通过实例看到代码使用静态方法。我想大多数人都认为SomeClass.somemethod()是用于类方法的。。。但是静态方法不需要self或cls。虽然@PM2Ring实际上有相同的答案,但我将此答案标记为示例
import someclass
someclass.somemethod()
...
class SomeClass:

    foo = 1

    def __init__(self, bar):
        self.bar = bar
        self.foo = 2

    @staticmethod
    def somemethod():
        # no access to self nor cls but can read foo via SomeClass.foo (1)
        foo = SomeClass.foo
        SomeClass.someclassmethod()
        ...

    @classmethod
    def someclassmethod(cls, ...):
        # access to cls, cls.foo (always 1), no access to bar
        foo = cls.foo
        ...

    def someinstancemethod(self, ...):
        # access to self, self.bar, self.foo (2 instead of 1 because of init)
        foo = self.foo
        bar = self.bar
        self.somemethod()
        self.someclassmethod()
        ...
def somemethod():
   pass

def somemethod2():
   pass

def somemethod3():
   pass