将python模块拆分为子模块的正确方法是什么?

2024-04-26 22:38:28 发布

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

我在一个用python编写的gitlab API库中工作。它一开始只是一个宠物项目,目的是了解更多关于模块的信息,所以我一开始就没有考虑这个问题,而是开始在module dir内的u init_uu.py中编写所有代码。在

当然,现在它已经增长了,我可以看到组织是相当差的,一个类有很多方法,测试变得很困难,检查代码是相当混乱的,因为那里有很多。在

所以我想把它分成几个子模块,你知道X import Y的窍门,所以代码更可读、更易测试、更小,但我发现我完全不知道如何实现它,因为我有很多共享变量,类中的所有方法都使用类变量。。。。在

那么,有没有关于用“子模块”创建python模块的好文档呢?如何在类之间共享对象变量?例如,我应该检查哪些模块在一个子模块上登录,而在另一个子模块上有功能?在

干杯!在


Tags: 模块项目方法代码pyimport目的api
2条回答

一般来说,这被称为“重构”。很多优秀的Python和一般的计算机科学文献,如果你去寻找的话。在

根据您所描述的,听起来您需要停止直接使用存储在类中的数据,并开始使用成员函数进行访问。在

class A(object):
    def __init__(self, value):
        self.value = value

a = A(1)
print a.value
a.value = 5
print a.value

看到我如何直接修改值了吗?这可能导致代码中的各种假设。最好使用方法来检索值并进行更改。注意,无意识的getFoo/setFoo也不好。尝试让你的方法公开行为而不是扭曲旋钮。在

^{pr2}$

看看逻辑是如何独立的吗?我们不希望A的实例变小,所以我们只允许增量,并将函数命名为increase来表示这一点。setValue不说明什么或原因。在

至于模块和子模块,将匹配的内容组合在一起。”匹配”是基于你自己的代码需求。所有的用户功能?所有的数据库功能?将东西放入模块中,就可以使用相同的公开API插入不同的模块。可以考虑从sqldb或本地文本文件进行身份验证。在

这个问题已经被问了很多,而这类问题的问题是它会相当主观(充其量)。当然,有很多最佳实践,例如:

  • 功能模块的逻辑分组
  • 保持模块简洁,不要太复杂
  • 设计合理的API

等等。。。在

如果发现它令人困惑、难以使用,那么其他人也可能会这样做。 在你的同事和朋友身上测试你的API和设计。了解他们的观点 用你的图书馆感觉不太好。在

一些有用的参考资料:

相关问题 更多 >