在类

时间:2017-09-30 16:33:27

标签: python python-3.x oop readability

假设我们有一个班级

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™处理这种困境的方法是什么?

2 个答案:

答案 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_attappend_index,就是如何设计类/模块。

它不仅仅是可读性,还有可维护性。对特定任务使用单独的方法不仅可以帮助您在将来需要时访问它们,而且还可以在发生任何异常或需要进一步增强时增强代码。因此,拥有一个单独的方法(对于每个单独的工作)最终将帮助您追溯异常,并让您自由修改唯一的部分。

所以我会说长期(大型/非常大)项目(确实会随着时间的推移),为每个单独的作业提供单独的方法以获得更好的可读性,可维护性以及易于调试和修复

是的我同意执行时间可能会花费你更多但值得这样做,因为它可以节省大量的开发时间,并且可以帮助您在生产中轻松跟踪错误。

现在采用pythonic方式编写代码,我建议您使用工具pylintflake8来检查文件复杂性。

尽管如此,当您知道在不久的将来可能需要其他地方(练习 DRY )时,为所有单个任务设置单独的方法是值得的。