Python 方法编码:引用属性的本地名称是否可以避免重复 self.attribute?

Python method coding: is a local name referring to an attribute ok to avoid repeating self.attribute?

假设你在一个Pythonclass中有一个非常重要的属性,以至于一个方法会多次引用它。例如,

class BeautifulDiagram(Object)
   def draw(self):
        # c is the drawing canvas (ReportLab), we use it many times
        self.c.setLineWidth(0.5 * mm)
        self.c.setStrokeColor('grey')
        ....

避免在上面的示例中写入大量属性 self.c 是否是一种好习惯,方法是创建对它的本地引用,例如

   c = self.c
   c.setLineWidth(0.5 * mm)
   c.setStrokeColor('grey')

是否有任何理由避免这种情况(afaik,它有效),要么是因为它违反了编码准则,要么是因为它效率低下(我不认为这是一个很大的负担,因为它只复制对属性的引用)? 还有什么更好的做法吗?

你有的很好。但是,Python 的 Zen 表明显式优于隐式,因此您会发现第一个片段的样式很常见。

此外,请注意您的第二个代码段,稍后您可能会在该方法中尝试执行 c = <new canvas>,但这是行不通的。你必须做 self.c = <new canvas>

还有一个选项是应用 Law of Demeter 并具有:

    def draw(self):
        self.setupCanvas(self.c)

    def setupCanvas(self, c): 
       c.setLineWidth(0.5 * mm)
       c.setStrokeColor('grey')
       ...