我有一个充满静态方法的Python类。将这些包装在一个类中而非原始函数中的优缺点是什么?使用Python类有什么好处吗?
16
A
回答
29
没有。这是模块的用途:分组相关的功能。使用完整的静态方法让我对Javaitis感到畏惧。我唯一会使用静态函数的地方是函数是类的一个组成部分。 (实际上,我可能想要使用类方法。)
0
我同意本杰明。而不是有一堆静态方法,你应该有一堆功能。如果你想组织它们,你应该考虑使用模块而不是类。然而,如果你想重构你的代码是OO,那是另一回事。
0
不仅没有优点,而且它比使用充满方法的模块更慢。在python中对静态方法的需求远远少于java或c#中的静态方法,它们在非常特殊的情况下使用。
12
不需要。让它们起作用会更好,如果它们相关,则将它们放入它们自己的模块中。举例来说,如果你有一个这样的类:
class Something(object):
@staticmethod
def foo(x):
return x + 5
@staticmethod
def bar(x, y):
return y + 5 * x
然后,它会更好,有这样一个模块,
# something.py
def foo(x):
return x + 5
def bar(x, y):
return y + 5 * x
这样一来,您通过以下方式使用它们:
import something
print something.foo(10)
print something.bar(12, 14)
不要害怕命名空间。 ;-)
1
只有当您具有一组功能而不是与需要在函数调用之间保持并以离散方式引用的一组数据(实例属性)进行交互时,类才有用。
如果你的类不包含静态方法以外的东西,那么你的类只是句法cruft,直接函数更清晰,你需要的东西。
5
如果你的职能是彼此依赖或全局状态,也可以考虑第三种方法:
class Something(object):
def foo(self, x):
return x + 5
def bar(self, x, y):
return y + 5 * self.foo(x)
something = Something()
使用此解决方案,您可以测试在隔离功能,因为你可以覆盖其他功能的行为或注入使用构造函数的依赖关系。
0
取决于功能的性质。如果它们不是非常不相关(它们之间的通话量最小)并且它们没有任何状态,那么是的,我会说把它们转储到一个模块中。但是,如果您需要修改行为,那么您可能会将自己踢在脚下,因为您正在将遗产扔出窗外。所以我的回答是也许,并确保你看看你的特定场景,而不是总是假设一个模块是收集一套方法的最好方法。
相关问题
- 1. python类有什么好处?
- 2. 使用Object Initializer有什么好处吗?
- 3. 使用位图有什么好处吗?
- 4. 使用@staticmethod有什么好处吗?
- 5. 使用MongoCredential类有什么好处?
- 6. 使用Python 3有什么好处/好处?
- 7. 为python类使用“获取函数”有什么好处?
- 8. 使用Zend_Config类的好处是什么?
- 9. nVidia Tesla卡有什么好处吗?
- 10. 保持MaxPermSize小有什么好处吗?
- 11. 学习LISP有什么好处吗?
- 12. 这样的课有什么好处吗?
- 13. 这个重构有什么好处吗?
- 14. 异步功能有什么好处吗?
- 15. Python函数注释有什么好处?
- 16. 使用分部类而不是抽象类有什么好处?
- 17. 使用类型安全的集合类有什么好处?
- 18. 在Python中使用干净功能的好处是什么类
- 19. 在Python中使用BytesIO而不是打开/读取有什么好处吗?
- 20. 冗余限定符有什么缺点吗?有什么好处?
- 21. node.js - 使用玉器有什么好处
- 22. 使用sessionStorage有什么好处?
- 23. 使用wait()和signal()有什么好处?
- 24. 使用RelayCommand对象有什么好处
- 25. 使用extend.js有什么好处?
- 26. 对Node.js使用Nginx有什么好处?
- 27. 使用Subversion有什么好处?
- 28. 使用git fetch有什么好处?
- 29. 使用ExecutorService有什么好处?
- 30. 使用JSF2资源有什么好处?
我同意这里的共识,所以我想知道:为什么Python支持静态方法呢? – 2009-01-18 22:20:51