假设我们有一个班级
class foo():
def __init__(self):
self.data = 10
...
def method(self):
...
self.free_indices.append(self.l[self.start_p])
var1 = self.l[self.search(var2[num])].pointer
...
可以清楚地看到,类中的方法和属性调用太长,因此代码的可读性降低。要解决这个问题,可以创建一对方法
def get_some_att(self, var2, num):
return self.l[self.search(var2[num])].pointer
def append_index(self):
self.free_indices.append(self.l[self.start_p])
乍一看似乎很合理,但假设你有十几个不同的电话,你会怎么做?您是否会创建十几个get_some_att
方法,从而大幅降低整体执行速度。
或者你会高兴地忘记所有提高速度的电话,但在可读性方面做出妥协。
那么真正的pythonic™处理这种困境的方法是什么?
答案 0 :(得分:0)
根据PEP8,在不使用\
的情况下断开长行的首选方法是将语句包装在括号中。例如:
class foo():
def __init__(self):
self.data = 10
def method(self):
self.free_indices.append(self.l[self.start_p])
var1 = (
self.l[self.search(var2[num])]
.var3 # you can chain method/attribute calls vertically
)
答案 1 :(得分:0)
是否让一个method
执行多项任务或将它们分成一个单独的get_some_att
和append_index
,就是如何设计类/模块。
它不仅仅是可读性,还有可维护性。对特定任务使用单独的方法不仅可以帮助您在将来需要时访问它们,而且还可以在发生任何异常或需要进一步增强时增强代码。因此,拥有一个单独的方法(对于每个单独的工作)最终将帮助您追溯异常,并让您自由修改唯一的部分。
所以我会说长期(大型/非常大)项目(确实会随着时间的推移),为每个单独的作业提供单独的方法以获得更好的可读性,可维护性以及易于调试和修复
是的我同意执行时间可能会花费你更多但值得这样做,因为它可以节省大量的开发时间,并且可以帮助您在生产中轻松跟踪错误。
现在采用pythonic方式编写代码,我建议您使用工具pylint
或flake8
来检查文件复杂性。
尽管如此,当您知道在不久的将来可能需要其他地方(练习 DRY )时,为所有单个任务设置单独的方法是值得的。