这个问题在某种程度上与语言无关,但并非完全与语言无关,因为面向对象编程(OOP)在Java中是不同的,而Java没有Python的一流功能。
换句话说,我对用Java之类的语言创建不必要的类感到内gui,但是我觉得在像Python这样少用的语言中可能会有更好的方法。
我的程序需要多次执行相对复杂的操作。该操作需要大量的“簿记”,必须创建和删除一些临时文件,等等。
这就是为什么它还需要调用许多其他“子操作”的原因-将所有内容放入一个巨大的方法中并不是很好,模块化,可读性强等。
现在这些是我想到的方法:
1.制作一个仅具有一个公共方法的类,并将子操作所需的内部状态保留在其实例变量中。
它看起来像这样:
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
我看到的这种方法的问题是,此类的状态仅在内部有意义,并且除了调用其唯一的公共方法外,它无法对其实例执行任何操作。
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2.制作一堆没有类的函数,并在它们之间传递各种内部需要的变量(作为参数)。
我看到的问题是我必须在函数之间传递很多变量。同样,这些功能将彼此紧密相关,但不会将它们分组在一起。
3.与2.类似,但是将状态变量设为全局而不是传递它们。
这根本没有好处,因为我必须使用不同的输入多次执行该操作。
有没有第四种更好的方法?如果没有,那么哪种方法更好?为什么?有什么我想念的吗?