gpt4 book ai didi

python - 在 Python 中使用类对函数进行分组

转载 作者:IT老高 更新时间:2023-10-28 20:47:42 26 4
gpt4 key购买 nike

我从事 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”的做事方式,而且感觉很困惑。我是想以正确的方式思考还是有其他方法?

最佳答案

另一种方法是制作一个 util package 并将您的函数拆分为该包中的不同模块。包的基础知识:创建一个目录(其名称将是包名)并在其中放入一个特殊文件,即 __init__.py 文件。这个可以包含代码,但是对于基本的包组织,它可以是一个空文件。

my_package/
__init__.py
module1.py/
modle2.py/
...
module3.py

假设你在你的工作目录中:

mkdir util
touch util/__init__.py

然后在你的 util 目录中,制作 calc_funcs.py

def add(a,b):
return a + b

def sub(a,b):
return a -b

还有format_funcs.py:

def cap(string):
return string.title()

def lower(string):
return string.lower()

现在,在您的工作目录中,您可以执行以下操作:

>>> from util import calc_funcs
>>> calc_funcs.add(1,3)
4
>>> from util.format_funcs import cap
>>> cap("the quick brown fox jumped over the lazy dog")
'The Quick Brown Fox Jumped Over The Lazy Dog'

编辑添加

但请注意,如果我们重新启动解释器 session :

>>> import util
>>> util.format_funcs.cap("i should've been a book")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'util' has no attribute 'format_funcs'

这就是 __init__.py 的用途!

__init__.py 中,添加以下内容:

import util.calc_funcs, util.format_funcs

现在,再次重启解释器:

>>> import util
>>> util.calc_funcs.add('1','2')
'12'
>>> util.format_funcs.lower("I DON'T KNOW WHAT I'M YELLING ABOUT")
"i don't know what i'm yelling about"

耶!我们可以通过轻松导入灵活地控制我们的命名空间!基本上,__init__.py 的作用类似于类定义中的 __init__ 方法。

关于python - 在 Python 中使用类对函数进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com