【发布时间】:2016-08-04 04:48:03
【问题描述】:
我从事 Python 科学程序员已有几年了,随着我的程序越来越大,我发现自己遇到了一个特定的问题。我是自学成才的,所以我从来没有接受过任何正式培训,并且花时间真正“正确”地使用 Python 进行编码的“约定”。
总之,我发现自己总是创建一个 utils.py 文件,我将所有定义的函数存储在我的程序使用的文件中。然后我发现自己将这些功能分组到各自的目的中。我知道对事物进行分组的一种方法当然是使用类,但我不确定我的策略是否与实际应该使用的类相反。
假设我有一堆功能大致相同:
def add(a,b):
return a + b
def sub(a,b):
return a -b
def cap(string):
return string.title()
def lower(string):
return string.lower()
现在显然这 4 个函数可以看作是做两个不同的目的,一个是计算,另一个是格式化。这就是逻辑告诉我要做的事情,但我必须解决它,因为我不想初始化一个与该类对应的变量。
class calc_funcs(object):
def __init__(self):
pass
@staticmethod
def add(a,b):
return a + b
@staticmethod
def sub(a, b):
return a - b
class format_funcs(object):
def __init__(self):
pass
@staticmethod
def cap(string):
return string.title()
@staticmethod
def lower(string):
return string.lower()
通过这种方式,我现在将这些方法“分组”到一个很好的包中,根据它们在程序中的角色,可以更快地找到所需的方法。
print calc_funcs.add(1,2)
print format_funcs.lower("Hello Bob")
话虽如此,我觉得这是一种非常“unpython-y”的做事方式,而且感觉很混乱。我是想以正确的方式思考还是有其他方法?
【问题讨论】:
-
查看我在
__init__.py上所做的编辑以获取更多信息 -
非常好的问题。我也是自学成才,遇到类似的组织问题,并且与您尝试将功能分组到类中具有完全相同的直觉!我意识到这不可能是理想的……毕竟,我从未见过其他人这样做。下面的包/模块方法很棒。
-
看到有人已经通过相同的程序来订购代码,我感到非常欣慰,想知道并询问它在现实世界中是如何完成的。谢谢@Uys of Spades
标签: python class conventions