何时在Python中使用方法级联?

Lia*_*con 6 python methods python-2.7 python-3.x

根据我对Pythonic编码风格(特别是PEP20)的理解,代码必须简单易读.考虑到这一点,方法层叠被认为是Pythonic?

例如,假设我们有一个Cascade类:

class Cascade(object):
  def __init__(self, pythonic):
    self.question = 'Is this Pythonic?'
    self.answer = pythonic

  def copy(self):
    import copy
    return copy.deepcopy(self)

  def is_pythonic(self):
    return self.answer
Run Code Online (Sandbox Code Playgroud)

然后哪个更好:

>>> cas = Cascade(False)
>>> cas.copy().is_pythonic()
 False
Run Code Online (Sandbox Code Playgroud)

要不然:

>>> cas1 = Cascade(False)
>>> cas2 = cas1.copy()
>>> cas2.is_pythonic()
 False
Run Code Online (Sandbox Code Playgroud)

在我看来,第一个选项更具可读性,因为我的眼睛从左到右扫 - 几乎类似于读书,而第二个选项每行保留一个简单的声明(这无疑是高度可读的).

编辑

Haleemur Ali,Lutz Hornclaust的有用评论之后,我想将问题重新解释为更广泛的"何时应该在Python中使用方法级联?"

Hal*_*Ali 7

两者都可以接受.

长链更难以阅读,所以尽量避免真正的长链.

此外,如果您将其分解为单独的语句,您可能会发现重用,即

c = cas1.copy()
c.method1()
c.method2()
c.is_pythonic()
Run Code Online (Sandbox Code Playgroud)

编辑以下注释@claust 还要注意级联在匿名对象中很有用:我在GUI编程中经常使用它,你可以创建并网格化一个对象,而不需要在以后引用它:tkinter.Label("label").grid (row = 0,column = 0)