我有一个问题,但我不知道该如何解决。假设您具有三个功能,即功能1,功能2和功能3。在功能1中,您需要执行一些操作,并给出特定的返回值,该返回值将用作第二个功能的输入。在第二个函数中,您将进行一些特定的计算,并以return结束,然后将其传递给第三个函数
我的问题是,一旦我将函数1的返回值传递给函数2,就重复了函数1中的所有计算(这里是这种情况下的计算,有多个图)函数2到3同样如此,现在我从功能1和功能2获得结果。希望您能理解我的意思。
我想要的只是func 1对func 2的返回值,func 2对3的返回值,而不是整个函数体。
这是我的代码:
class test:
def __(self)__:
self.attribute1=pd.read_csv(...)
self.attribite2=pd.read_csv(...)
def func1(self):
plt.plot(a,b)
plt.plot(c,d)
return x
def func2(self):
self.data_2=self.func1()
plt.plot(e,f)
plt.plot(g,h)
return y
def func3(self):
self.data_3=self.func2()
plt.plot(i,j)
data_test=test()
print(data_test.func2())
我的问题是(让我们关注func2)。如果我使用func1的输入并执行func2的代码,我也会得到两个图。我不想那样。我只想查看图(e,f)和图(g,h),而不是图(a,b),图(c,d),图(e,f)和图(g,h)>
答案 0 :(得分:1)
您说您“将函数1的返回传递给函数2”,但是您从未这样做。
您不会在任何地方传递任何结果,而且您的函数都不会接受任何输入(self
除外)-您是在每个函数中直接调用这些函数。
换句话说,每次您呼叫function2
时,它都会呼叫function1
,并且每次您呼叫function3
时,它都会呼叫function2
,而后者又呼叫function1
与您的描述匹配的代码如下:
class test:
def __(self)__:
self.attribute1=pd.read_csv(...)
self.attribite2=pd.read_csv(...)
def func1(self):
plt.plot(a,b)
plt.plot(c,d)
return x
def func2(self, a):
self.data_2 = a
plt.plot(e,f)
plt.plot(g,h)
return y
def func3(self, x):
self.data_3 = x
plt.plot(i,j)
return z
data_test = test()
print(data_test.func3(data_test.func2(data_test.func1())))
答案 1 :(得分:1)
您的类定义未遵循OOP整洁的设计,为此,每种方法都应执行最原子的任务。
您的方法func1
,func2
和func3
,它们都至少执行两项任务:绘制某些内容并返回其他内容。
考虑更改您的类,以便每个方法都只能做一件事情,例如定义公共APIS和私有方法:
class test:
def __(self)__:
self.attribute1 = []
self.attribite2 = []
def _func1(self):
return x
def _func2(self):
self.data_2 = self._func1()
return y
def _func3(self):
self.data_3 = self._func2()
def func2(self):
self._func2()
plt.plot(e,f)
plt.plot(g,h)
def func3(self):
self._func3()
plt.plot(e,f)
plt.plot(g,h)
data_test=test()
data_test.func2()
通过这种方式func2
和func3
是公共api(又名:旨在从班级外部调用),可以“完成工作”(在self.data_2
和{{ 1}})AND图; self.data_3
和_func2
是私有方法(也就是仅类本身应使用的方法)只能执行工作。
现在,调用_func3
将使用方法func2
和_func1
,但仅绘制_func2
中定义的内容。