我有一个文件,意味着是一个实用程序文件。 该文件应包含许多静态方法。
我应该用这种方式定义类中的方法:
#utility.py
class utility(object):
@staticmethods
def method1(a,b,c):
pass
@staticmethods
def method2(a,b,c):
pass
或像这样使用它(没有类):
#utility.py
def method1(a,b,c):
pass
def method2(a,b,c):
pass
答案 0 :(得分:27)
第二个选项是Python中的运作方式。我的意思是,如果您所做的只是导入函数,那么您可以执行以下操作:
from utility import some_func
将导入您的功能。
最佳实践是,如果您只使用静态函数,那么只需将它们放在单独模块的全局命名空间中,它将使您的生活更轻松。你要做的是制作对象,然后用静态方法填充它们。为什么这样做,何时可以在.py
文件中定义函数?
事实上,你正在尝试做的事情已经完成了。你试图存储一些好的实用功能。好吧,python-requests
是第三方库,大多数Pythonistas都喜欢这样做。它将其良好的实用功能存储在一个单独的模块中。 Here is the example.
答案 1 :(得分:17)
类封装了数据和行为,因此作为一般规则:
namedtuple
,而不是class
,除非你需要在创建数据后修改它。@classmethod
。@staticmethod
。class
只有一个方法,或者除__init__()
之外只有一个方法,那么您几乎可以并且应该将其重写为函数。课程很容易被滥用,但是应该避免将所有东西都推到课堂上的诱惑。你应该在它们有意义的时候使用它们,并且当它们没有时使用它们。
答案 2 :(得分:10)
虽然这个问题有点基于意见,但我会说第二个更好。它减少了冗余。使用第一种方法,您将不得不这样做:
import utility
utility.utility.method1(...)
或:
from utility import utility
utility.method1(...)
然后使用第二个允许您简单地执行:
import utility
utility.method1(...)
或:
from utility import method1
method1(...)
如果你正在创建一个只包含静态方法的类,我的问题是“为什么你需要这个类?”它在这里没有任何积极意义。