关于如何删除python中重复代码的建议

关于如何删除python中重复代码的建议,python,Python,我使用的是Pyqt5,每个函数都会传递一个不同的数据帧,这取决于创建不同图形的数据。似乎有很多重复的代码,我想知道您是否可以提供关于如何重构下面代码的建议 连接信号和插槽 连接到按钮的功能 图表类 首先将图表类修改为不明确 class Chart: ... def plot_chart(self, figure, plot, ylabel): plt.figure(figure) plt.plot(plot)

我使用的是Pyqt5,每个函数都会传递一个不同的数据帧,这取决于创建不同图形的数据。似乎有很多重复的代码,我想知道您是否可以提供关于如何重构下面代码的建议

连接信号和插槽 连接到按钮的功能 图表类
首先将图表类修改为不明确

class Chart:
    ...

    def plot_chart(self, figure, plot, ylabel):           
        plt.figure(figure)
        plt.plot(plot)
        plt.ylabel(ylabel)
        plt.show()
然后,您可以创建一个函数来创建图表:

def create_chart(self, num, name, Title, StartDate, EndDate, Data):
        c = Chart(Title,StartDate,EndDate,Data)
        c.PlotChart(num, [1, 2, 3, 4], f'Chart {name}')
然后使用
getattr
和循环连接它们:

  for num, name in enumerate('ABCDEFGH', 1):
        plot = getattr(self.ui, f'Plot{name}')
        plot.clicked.connect(
            lambda: self.create_chart(num, name,
                self.ui.Title,
                self.ui.StartDate,
                self.ui.EndDate,
                self.A))

首先将图表类修改为不明确

class Chart:
    ...

    def plot_chart(self, figure, plot, ylabel):           
        plt.figure(figure)
        plt.plot(plot)
        plt.ylabel(ylabel)
        plt.show()
然后,您可以创建一个函数来创建图表:

def create_chart(self, num, name, Title, StartDate, EndDate, Data):
        c = Chart(Title,StartDate,EndDate,Data)
        c.PlotChart(num, [1, 2, 3, 4], f'Chart {name}')
然后使用
getattr
和循环连接它们:

  for num, name in enumerate('ABCDEFGH', 1):
        plot = getattr(self.ui, f'Plot{name}')
        plot.clicked.connect(
            lambda: self.create_chart(num, name,
                self.ui.Title,
                self.ui.StartDate,
                self.ui.EndDate,
                self.A))

首先,我要删除
charts
的方法名称中对特定图表的所有显式引用:

类图表():
定义初始日期(自我、标题、开始日期、结束日期、数据):
self.Title=标题
self.StartDate=StartDate
self.EndDate=EndDate
self.Data=Data
def绘图仪(自身、图表):
如果图表=='A':
#图面数据
plt.图(1)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表==“B”:
plt.图(2)
plt.绘图([1,2,3,4])
elif图表=='C':
plt.图(2)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表=='D':
plt.图(4)
plt.绘图([1,2,3,4])
elif图表=='E':
plt.图(5)
plt.绘图([1,2,3,4])
elif图表=='F':
plt.图(6)
plt.绘图([1,2,3,4])
elif图表=='G':
plt.图(7)
plt.绘图([1,2,3,4])
elif图表==“H”:
plt.图(8)
plt.绘图([1,2,3,4])
elif图表==“I”:
plt.图(9)
plt.绘图([1,2,3,4])
其他:
返回
plt.ylabel('图表'+图表)
plt.show()
然后,您的
CreateChart
函数都简化为一个:

def CreateChart(self、图表、标题、开始日期、结束日期、数据):
c=图表(标题、开始日期、结束日期、数据)
c、 绘图仪(图表)
连接功能也类似:

对于“ABCDEFGHJI”中的图表:
fn=lambda:self.CreateChart(Chart,self.ui.Title,self.ui.StartDate,self.ui.EndDate,getattr(self,Chart))
getattr(self.ui,“绘图”+图表)。单击。连接(fn)

注意:Python中的惯例是对变量名和函数名使用小写和下划线,例如
title
start\u date
chart
plot\u chart
等,以将它们与类名区分开来。我建议在您的代码中采用这一点。

我首先要删除
图表的方法名称中对特定图表的所有显式引用:

类图表():
定义初始日期(自我、标题、开始日期、结束日期、数据):
self.Title=标题
self.StartDate=StartDate
self.EndDate=EndDate
self.Data=Data
def绘图仪(自身、图表):
如果图表=='A':
#图面数据
plt.图(1)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表==“B”:
plt.图(2)
plt.绘图([1,2,3,4])
elif图表=='C':
plt.图(2)
plt.绘图([1,2,3,4])
#打印(self.Data.head())
elif图表=='D':
plt.图(4)
plt.绘图([1,2,3,4])
elif图表=='E':
plt.图(5)
plt.绘图([1,2,3,4])
elif图表=='F':
plt.图(6)
plt.绘图([1,2,3,4])
elif图表=='G':
plt.图(7)
plt.绘图([1,2,3,4])
elif图表==“H”:
plt.图(8)
plt.绘图([1,2,3,4])
elif图表==“I”:
plt.图(9)
plt.绘图([1,2,3,4])
其他:
返回
plt.ylabel('图表'+图表)
plt.show()
然后,您的
CreateChart
函数都简化为一个:

def CreateChart(self、图表、标题、开始日期、结束日期、数据):
c=图表(标题、开始日期、结束日期、数据)
c、 绘图仪(图表)
连接功能也类似:

对于“ABCDEFGHJI”中的图表:
fn=lambda:self.CreateChart(Chart,self.ui.Title,self.ui.StartDate,self.ui.EndDate,getattr(self,Chart))
getattr(self.ui,“绘图”+图表)。单击。连接(fn)
注意:Python中的惯例是对变量名和函数名使用小写和下划线,例如
title
start\u date
chart
plot\u chart
等,以将它们与类名区分开来。我建议在代码中采用这一点