在边缘编程ca中选择类或函数

2024-10-03 06:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

有时在编写python软件时,我会遇到这样一种情况:我不确定是使用带有子函数的函数,还是只使用一个类。在这些情况下,我有一系列不同的输入,我想对它们应用一些转换,然后生成一个不同的输出。我不太关心从输入到输出过程中产生的任何变量。它应该是一个函数,而不是一个简单的类。但在这些情况下,所涉及的操作也相当复杂,通常需要的子功能仅在将输入转换为输出的过程中有用,而不是更一般的意义上。在

一天下来,我通常只想用:

output = my_function(input)

所以我可以做一些类似的事情

^{pr2}$

但是同事X可能会说,哇,这看起来是一个非常复杂的函数,你应该使用一个类!或者我可以这么做

class my_function(object):
   def __new__(self, input):
      #lots of complex code here that calls subfunc1 and subfunc2
      return output 
    @staticmethod 
    def subfunc1(blah):
        return blah1output
    @staticmethod 
    def subfunc2(blah):
        return blah2output

但是,这似乎是类的一个奇怪的用途,因为我并不真正关心创建和维护类的实例。在

不过,在这里使用类的一个主要优点是可以更容易地测试subfunc1和subfunc2,而仅此一点就足以成为使用它们的理由。在

但是,由于我对编程还不熟悉,有人能为生产环境和/或通常是最具python风格的解决方案提出建议吗?在


Tags: 函数inputoutputreturn软件过程mydef
1条回答
网友
1楼 · 发布于 2024-10-03 06:19:59

@二战的评论是正确的答案。在

为了详细说明,您的直觉是正确的,即创建一个将作为单例函数的类可能不是python类型的-模块是实现这一点的首选方法(这里是programming faq中的一个间接引用)。在

您也正确地认为能够测试您的子功能是很好的。将它们从函数体中拉出的另一个原因是,Python作为一种解释语言,在每次调用外部函数时都会在内部重新构建子函数。在

Benjamin Gleizman辉煌的howdoi module(链接到他的github repo)是一个很好的例子,说明了如何按照PEP 8哲学将复杂的问题分解成小的、非常可读的部分,即“扁平比嵌套好”和“简单比复杂好”

编辑

下面是一个简单模块(python tutorial on modules)的示例,它可以屏蔽内部函数。结构是:

mymodule
|____
  |___  __init__.py
  |___  submodule.py

__init__.py中:

^{pr2}$

submodule.py中:

^{3}$

使用它:

>>> import mymodule
>>> result = mymodule.my_function(5)
>>>
>>> # But internal functions (not imported) won't be visible...
>>> mymodule._subfunc1(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '_subfunc1'

相关问题 更多 >