首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类中处理长方法调用的Pythonic方式

在类中处理长方法调用的Pythonic方式
EN

Stack Overflow用户
提问于 2017-10-01 00:33:27
回答 2查看 110关注 0票数 0

假设我们有一个类

代码语言:javascript
复制
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
        ...

很明显,类中的方法和属性调用太长,从而降低了代码的可读性。要解决这个问题,可以创建一对方法

代码语言:javascript
复制
    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式的™方法是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2017-10-01 00:51:12

根据PEP8的说法,在不使用\的情况下换行的首选方法是将语句括在括号中。例如:

代码语言:javascript
复制
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
    )
票数 0
EN

Stack Overflow用户

发布于 2017-10-01 01:32:33

无论是使用单个method来执行多个任务,还是将它们拆分成单独的get_some_attappend_index,都取决于您如何设计类/模块。

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

所以我会说,在(大型/超大型)项目的长期运行中(确实会随着时间的推移),绝对有必要为每个单独的作业使用单独的方法,以获得更好的可读性、可维护性以及易于调试和修复。

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

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

尽管如此,当你知道在不久的将来可能需要其他地方时,为所有单独的任务使用单独的方法是值得的(practising DRY)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46504790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档