什么时候可以"好的"为了便于阅读,在Python类中简单地排除self?

时间:2018-04-24 08:36:40

标签: python oop

开始编程GUI,这也标志着我第一次涉足OOP。

我觉得我很清楚为什么应该包含self。但相反,我仍然不确定我是否理解的后果,包括self

例如,

class DataHolder(object):    
    def loadSeries(self, name, filename):
        df = pd.read_csv(filename, ...)
        df = something()
        df = something_else()

        self.meta[name].values = df

我已经定义了一个类来帮助我管理数据。每次加载数据文件时,都需要加载Pandas和"抛光" (例如标题,额外的列和删除的东西),直到它准备好被隐藏在一些字典结构中。在这里,我没有看到将df与任何对象联系起来的理由,因为它基本上是可读性的一次性中间结果。

这个程序有什么问题吗?可能出问题吗?

同样,有没有理由不在方法的范围内组成临时名称?

def refreshPlot(self):
    if self.currentlySelectedName != None:
        self.data.seriesData(self.currentlySelectedName)

        self.canvas.ax.clear()
        self.canvas.ax.plot(self.data.seriesData(self.currentlySelectedName), color = "black")

        if len(self.data.getMeta(self.currentlySelectedName).xdata) == 1:
            self.canvas.ax.axvline(self.data.getMeta(self.currentlySelectedName).xdata[0], color = "red")
        elif len(self.data.getMeta(self.currentlySelectedName).xdata) == 2:
            self.canvas.ax.axvline(self.data.getMeta(self.currentlySelectedName).xdata[0], color = "red")
            self.canvas.ax.axvline(self.data.getMeta(self.currentlySelectedName).xdata[1], color = "red")
    else:
        self.canvas.ax.clear()

    self.canvas.draw()

或者我可以暂时分配可读的名字:

def refreshPlot(self):
    name = self.currentlySelectedName
    xdata = self.data.getMeta(name).xdata

    if name != None:
        data = self.data.seriesData(name)

        self.canvas.ax.clear()
        self.canvas.ax.plot(data, color = "black")

        if len(xdata) == 1:
            self.canvas.ax.axvline(xdata[0], color = "red")
        elif len(xdata) == 2:
            self.canvas.ax.axvline(xdata[0], color = "red")
            self.canvas.ax.axvline(xdata[1], color = "red")
    else:
        self.canvas.ax.clear()

    self.canvas.draw()

1 个答案:

答案 0 :(得分:0)

这是一种编程方式,它不是非法的,但您应该记住的一件事是,分配这些变量不会改变类变量。

这是您为提高可读性而面临的维护风险,并且作为您自己选择的开发人员。这种方法的另一个缺点是,如果你对很多变量这样做,你的代码会有一个变量爆炸,但仍然无法读取。

我可以理解你是这样做的,但是我会建议重新安排这个更干净的'趋势,并接受这是语言的设计方式。在我看来,它可以产生的时间损失和头痛不能证明这种设计是正确的。