代码之家  ›  专栏  ›  技术社区  ›  Michael B Hildebrand

在Python 3.12中将函数转换为方法

  •  0
  • Michael B Hildebrand  · 技术社区  · 11 月前

    我有一个Python程序,它有1000个函数(def),但都没有使用类。

    是否有一种自动的方法将这些函数转换为类方法?我会根据需要将相关功能组合在一起。

    我尝试了代码片段(Python 3.x)和Python代码,但都没有达到预期效果。

    0 回复  |  直到 11 月前
        1
  •  2
  •   VoNWooDSoN    11 月前

    这里有一个非常大的问题:“你到底为什么要这么做?!”

    类虽然被允许,但并不是python的主要组织工具,模块才是。导入模块时,它们都会在该模块的命名空间中可用。而且,引用 Python之禅 “扁平比嵌套好。”和“命名空间是一个很棒的主意——让我们做更多这样的事情!”

    如果没有一个具体的例子来说明你想如何将函数放入类中,很难说你实际上想做什么。但是,感觉你对用类/对象封装状态不感兴趣,相反,你似乎对逻辑上对函数和目的分组感兴趣。要使用模块做到这一点,请考虑以下文件树:

    my_package/
        __init__.py
        user/
            __init__.py
            profile.py
            settings.py
        data/
            __init__.py
            processing.py
            transform.py
    

    通过将与用户配置文件相关的功能移动到 my_package/user/profile.py 然后,您可以像这样导入所需的函数:

    from my_package.user.profile import update_profile
    # and call
    update_profile(data)
    
    # or if you think that being explicit is better than implicit
    import my_package.user.profile as profile
    # and call
    profile.update_profile(data)
    

    这绝对是 the most pythonic way to organize your code ,而不是像静态方法那样将函数强制作为命名空间放入类中。 重要的是 __init__.py 在文件树中。这就是告诉解释程序这些文件夹是模块。

    更重要的是,如果你这样做,你甚至可以使用 build module 使此模块可卸载到nexus/pypi仓库,以便在其他项目中使用。。。但我不会在这里谈这个。