我在python中的gitlab API库中工作。它最初是作为一个宠物项目来了解更多有关模块的内容,因此我一开始并没有考虑它,并开始在模块目录中的__init__.py中编写所有代码。
当然,现在已经增长了,我可以看到组织很差,一个类有很多方法,测试变得困难,检查代码很混乱,因为那里有很多
所以我想把它分成几个子模块,你知道X import Y的代码,所以代码更具可读性,可测量性,更小但是我发现我完全不知道如何实现它,因为我有很多使用类变量的所有方法共享变量等全部类...
那么,有没有关于用“子模块”创建python模块的好文档?如何在类之间共享对象变量?我应该检查的任何明确的模块,例如在一个子模块和其他子模块上有登录名吗?
干杯!
答案 0 :(得分:2)
这个问题已经被问了很多,这类问题的问题在于它是相当主观的( at best )。当然有很多最佳实践,例如:
等...
如果你发现它令人困惑,难以使用,其他人也可能会这样做。 在您的同事和朋友身上测试您的API和设计。了解他们的看法 感觉不能使用你的图书馆。
一些有用的参考资料:
答案 1 :(得分:1)
一般来说,这被称为“重构”。如果你寻找它,那里有很多优秀的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也不好。尝试让你的方法暴露行为而不是扭曲。
class A(object):
def __init__(self, value):
self.value = value
def is_safe(self):
if value > 10:
return False
return True
def increase_value(self, increment):
if increment <= 0:
raise ValueError("only positive increments are allowed")
self.value += increment
了解逻辑是如何自包含的?我们从不希望A的实例变小,所以我们只允许增量并命名函数增加来指示这一点。 setValue
并不知道是什么或为什么。
对于模块和子模块,将匹配的事物组合在一起。 “匹配”基于您自己的代码需求。所有的用户功能?所有数据库功能?将内容放入模块中可以使用相同的公开API插入不同的模块。从SQL DB或本地文本文件中思考身份验证。