【问题标题】:When to use method cascading in Python? [closed]何时在 Python 中使用方法级联? [关闭]
【发布时间】:2015-05-20 08:08:06
【问题描述】:

根据我对 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

那么哪个更好:

>>> cas = Cascade(False)
>>> cas.copy().is_pythonic()
 False

否则:

>>> cas1 = Cascade(False)
>>> cas2 = cas1.copy()
>>> cas2.is_pythonic()
 False

在我看来,第一个选项更具可读性,因为我的眼睛从左向右扫视 - 几乎类似于阅读一本书,而第二个选项每行保留一个简单的语句(诚然,这也是高度可读的)。

编辑

Haleemur AliLutz Hornclaust 提供有用的 cmets 之后,我想将问题改写为更广泛的“我什么时候应该在 Python 中使用方法级联?” p>

【问题讨论】:

    标签: python python-2.7 python-3.x methods


    【解决方案1】:

    两者都可以接受。

    长链更难阅读,因此请尽量避免使用非常长的链。

    另外,如果你把它分解成单独的语句,你可能会发现重用,即

    c = cas1.copy()
    c.method1()
    c.method2()
    c.is_pythonic()
    

    编辑@claust 的以下评论 另请注意,级联在匿名对象中很有用:我在 GUI 编程中经常使用它,您可以在其中创建和网格化对象而无需稍后引用它: tkinter.Label("label").grid(row=0, column =0)

    【讨论】:

    • 好点——在别处重用对象的能力绝对是单语句选项的有力论据。
    • 另请注意,级联在匿名对象中很有用:我在 GUI 编程中经常使用它,您可以在其中创建和网格化对象而无需稍后引用它:tkinter.Label("label").grid(row=0, column=0)
    • @claust,你说得对,我会为任何遇到这个问题的人更新我的答案。
    【解决方案2】:

    这取决于。如果你需要的结果

    cas.copy()
    

    稍后,您必须使用第二种方法。如果您不需要它并且想在它上面调用is_pythonic(),第一种方法很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2014-12-05
      • 2012-05-29
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多