Python 包含所有静态方法的类
我有一个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个
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