【问题标题】:Use return value of one method as a parameter for another method within the same class使用一个方法的返回值作为同一类中另一个方法的参数
【发布时间】:2020-10-01 06:10:48
【问题描述】:

我正在尝试创建一个由多个方法组成的类,并且我想将方法​​的返回值用作同一类中其他方法的参数。有可能这样做吗?

class Result_analysis():
    def __init__(self, confidence_interval):
        self.confidence_interval = confidence_interval

    def read_file(self, file_number):
        dict_ = {1: 'Ten_Runs_avg-throughput_scalar.csv',
                 2: 'Thirty_Runs_avg-throughput_scalar.csv',
                 3: 'Hundred_Runs_avg-throughput_scalar.csv',
                 4: 'Thousand_Runs_avg-throughput_scalar.csv'}
        cols = ['run', 'ber', 'timelimit', 'repetition', 'Module', 'Avg_Throughput']
        data = pd.read_csv(dict_[file_number], delimiter=',', skiprows=[0], names=cols)

        df = pd.DataFrame(data)
        return df

    def extract_arrays(self,df):
    df = Result_analysis().read_file(file_number)
        avgTP_10s_arr = []
        avgTP_100s_arr = []
        avgTP_1000s_arr = []

        for i in range(len(data)):
            if (df['timelimit'][i] == 10):
                avgTP_10s_arr.append(df['Avg_Throughput'][i])
            elif (df['timelimit'][i] == 100):
                avgTP_100s_arr.append(df['Avg_Throughput'][i])
            elif (df['timelimit'][i] == 1000):
                avgTP_1000s_arr.append(df['Avg_Throughput'][i])
        return avgTP_10s_arr, avgTP_100s_arr, avgTP_1000s_arr

d =  Result_analysis(0.95)
d.read_file(1)
d.exextract_arrays(d.read_file(1))

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-92-485309654e5c> in <module>
      1 d =  Result_analysis(0.95)
      2 d.read_file(1)
----> 3 d.extract_arrays(d.read_file(1))

<ipython-input-91-06bc29de002c> in extract_arrays(self, file_number)
     15 
     16     def extract_arrays(self,file_number):
---> 17         df = Result_analysis().read_file(file_number)
     18         avgTP_10s_arr = []
     19         avgTP_100s_arr = []

TypeError: __init__() missing 1 required positional argument: 'confidence_interval'

我得到了上面给出的错误。

【问题讨论】:

  • 是的,有可能。请显示您遇到的错误。
  • 那我该如何使用呢?我是初学者,可能做得不对。 -------------------------------------------------- ------------------------- TypeError Traceback(最近一次调用最后一次) in 1 d = Result_analysis (0.95) ----> 2 d.extract_arrays() 类型错误:extract_arrays() 缺少 1 个必需的位置参数:'df'
  • 你在调用d.extract_arrays()时没有给它一个参数,但是因为你已经将它定义为def extract_arrays(self, df)d被隐式传递为self),它需要一个额外的参数,它你没有提供。这就是错误消息告诉您的内容。
  • 请显示您创建d 的代码并调用方法(edit 问题,请勿将代码作为评论发布)。
  • 删除第 17 行,以及d.read_file(1) 行。编辑:哦等等,你已经改变了更多......基本上回到你在这里发布的原始代码,但不是d.extract_arrays()使用d.extract_arrays(d.read_file(1))

标签: python methods parameters


【解决方案1】:

如果您不想从类外部显式调用函数 read_file。那么您可以将程序转换为:

class Result_analysis():
    def __init__(self, confidence_interval):
        self.confidence_interval = confidence_interval

    def read_file(self, file_number):
        dict_ = {1: 'Ten_Runs_avg-throughput_scalar.csv',
                 2: 'Thirty_Runs_avg-throughput_scalar.csv',
                 3: 'Hundred_Runs_avg-throughput_scalar.csv',
                 4: 'Thousand_Runs_avg-throughput_scalar.csv'}
        cols = ['run', 'ber', 'timelimit', 'repetition', 'Module', 'Avg_Throughput']
        data = pd.read_csv(dict_[file_number], delimiter=',', skiprows=[0], names=cols)

        df = pd.DataFrame(data)
        return df

    def extract_arrays(self,file_number):
        df = Result_analysis().read_file(file_number)
        avgTP_10s_arr = []
        avgTP_100s_arr = []
        avgTP_1000s_arr = []

        for i in range(len(data)):
            if (df['timelimit'][i] == 10):
                avgTP_10s_arr.append(df['Avg_Throughput'][i])
            elif (df['timelimit'][i] == 100):
                avgTP_100s_arr.append(df['Avg_Throughput'][i])
            elif (df['timelimit'][i] == 1000):
                avgTP_1000s_arr.append(df['Avg_Throughput'][i])
        return avgTP_10s_arr, avgTP_100s_arr, avgTP_1000s_arr

调用函数extract_arrays,并将file_number作为参数传递

【讨论】:

  • 我收到以下错误! TypeError Traceback(最近一次调用最后一次) in 1 d = Result_analysis(0.95) ----> 2 d.extract_arrays(d.read_file(1)) in extract_arrays(self, file_number) 15 16 def extract_arrays(self,file_number): ---> 17 df = Result_analysis().read_file(file_number) 18 avgTP_10s_arr = [] 19 avgTP_100s_arr = [] TypeError: __init__( ) 缺少 1 个必需的位置参数:'confidence_interval'
  • 在自己的类中创建Result_analysis 对象可能有意义的一次是extract_arrays() 是类函数还是静态函数。它在成员函数中通常没有意义。
  • df = Result_analysis().read_file(file_number)行替换为conf_int = "something you already know"df = Result_analysis(conf_int).read_file(file_number)
【解决方案2】:

您没有包含所有代码,您应该使用回溯更新问题,但您的意思是:

n = ...  # I don't know what n is.
d = Result_analysis(0.95)
print(d.extract_arrays(d.read_file(n))

【讨论】:

  • 是的,我想做类似的事情,使我能够从第一个方法获取返回值并将其传递给下一个方法。
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 2021-12-24
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
相关资源
最近更新 更多