【发布时间】:2018-05-13 16:43:12
【问题描述】:
我有一个主类,其中有一个 ton 的不同功能。越来越难管理了。我希望能够将这些函数分离到一个单独的文件中,但我发现很难想出一个好的方法。
这是我到目前为止所做的:
文件 main.py
import separate
class MainClass(object):
self.global_var_1 = ...
self.global_var_2 = ...
def func_1(self, x, y):
...
def func_2(self, z):
...
# tons of similar functions, and then the ones I moved out:
def long_func_1(self, a, b):
return separate.long_func_1(self, a, b)
文件 separate.py
def long_func_1(obj, a, b):
if obj.global_var_1:
...
obj.func_2(z)
...
return ...
# Lots of other similar functions that use info from MainClass
我这样做是因为如果我这样做:
obj_1 = MainClass()
我希望能够做到:
obj_1.long_func_1(a, b)
代替:
separate.long_func_1(obj_1, a, b)
我知道这似乎有点挑剔,但我希望几乎所有代码都以 obj_1. 开头,所以不会混淆。
有没有比我目前正在做的更好的解决方案?我当前设置的唯一问题是:
- 我必须更改函数的两个实例的参数
- 这似乎是不必要的重复
我知道这个问题已经被问过好几次了,但我不太明白之前的答案和/或我认为该解决方案不能完全代表我的目标。我对 Python 还是很陌生,所以我很难弄清楚这一点。
【问题讨论】:
-
如果您是 Python 新手,只需遵守约定,并将类的所有方法保存在同一个文件中。
-
如果您必须将您的方法分组到单独的模块中,请使用继承;在一个模块中创建一个基类,将其导入并在另一个模块中对其进行子类化。
-
@MartijnPieters 我知道我可以做到这一点,但是类中的所有函数都没有最终确定,所以我发现自己滚动了很多以找到合适的函数,这比我想要的要花费更多的时间只是因为有这么多。
-
那不是改代码就能解决的问题;这是一个可以通过使用an IDE 来解决的问题,它允许您跳转到函数的位置。 (或使用文本编辑器的“查找”功能。)
-
如果一个文件不足以满足所有方法,那么您的设计可能有问题。该类太
heavy并且可能将其分成两个或三个类(和文件)是解决方案。
标签: python file object decorator