我用 Python 编程已经有一段时间了,并且已经涵盖了一些 Python 风格的知识,但在如何正确使用类方面仍然存在问题。在阅读面向对象的讲座时,我经常发现像单一责任原则这样的规则
“单一职责原则说,一个类应该有一个,而且只有一个,改变的理由”
读到这里,我可能会想到将一个班级分成两个班级,例如:
class ComplicatedOperations(object):
def __init__(self, item):
pass
def do(self):
...
## lots of other functions
class CreateOption(object):
def __init__(self, simple_list):
self.simple_list = simple_list
def to_options(self):
operated_data = self.transform_data(self.simple_list)
return self.default_option() + operated_data
def default_option(self):
return [('', '')]
def transform_data(self, simple_list):
return [self.make_complicated_operations_that_requires_losts_of_manipulation(item)
for item in simple_list]
def make_complicated_operations_that_requires_losts_of_manipulation(self, item):
return ComplicatedOperations(item).do()
对我来说,这引发了许多不同的问题。喜欢:
- 什么时候应该在类函数中使用类变量或传递参数?
- 类应该
ComplicatedOperations
是一个类还是只是一堆函数? - 是否应该使用该
__init__
方法来计算最终结果。这是否使该课程难以测试。 - pythonists的规则是什么?
回答后编辑:
所以,阅读奥古斯托的理论,我最终会得到这样的结果:
class ComplicatedOperations(object):
def __init__(self):
pass
def do(self, item):
...
## lots of other functions
def default_option():
return [('', '')]
def complicate_data(item):
return ComplicatedOperations().do(item)
def transform_data_to_options(simple_list):
return default_option() + [self.complicate_data(item)
for item in simple_list]
(还纠正了 default_option 的一个小错误。)