2017-12-18 9 views
0

変数とすべてを正しく参照していることがほぼ確実だから、間違っていることがわかりません。クラスと関数 -

私は、関数を使うのがかなり新しく、1日前にPythonクラスを使うことを学んだばかりです。

私は、コードを実行するときに、私はこのエラーメッセージが表示されます:

line 37, in pathlist 
    while self.no_of_files > 0:    #self.number_of_files 
AttributeError: 'int' object has no attribute 'no_of_files' 

私はそれがコードの私の順次ステップとは何かを持っている、またはので、私は変換したことであると推測していますコードの20行目のint()にnumfilesを入力します。

私は以下のコードを添付しました。事前のおかげで私を助けてください:)

import csv 
import numpy as np 


''' DEFINING MAIN CONTROL''' 

def main(): 
    no_of_files # = number_of_files() 
    a = Calculate_RMSE_Assess_Models() 
    a.no_of_files() # = no_of_files 
    a.pathlist() 
    a.out_path() 
    a.open_read_write_files() 


''' DEFINING CLASS OF ALL ''' 
class Calculate_RMSE_Assess_Models: 

    def __init__(self, no_of_files): 
     self.no_of_files = no_of_files 

    def number_of_files(): 
     numfiles = input("Enter the number of files to iterate through: ") 
     numfilesnumber = int(numfiles) 
     return numfilesnumber 

    no_of_files = number_of_files() 


    def pathlist(self): 
     filepathlist = [] 
     while self.no_of_files > 0:    #self.number_of_files 
      path = input("Enter the filepath of the input file: ") 
      filepathlist.append(path) 
      no_of_files = no_of_files - 1 
     return filepathlist 

    list_filepath = pathlist(no_of_files) 

    def out_path(): 
     path = input("Enter the file path of output path: ") 
     return path 

    file_out_path = outpath() 

    def open_read_write_files(): 
     with open('{d[0]}'.format(d=list_filepath), 'r') as csvinput, open('{d[1]}'.format(d=list_filepath), 'r') as csvinput2, open('d{[2]}'.format(d=list_filepath), 'r') as csvinput3, open('{d}'.format(d=file_out_path), 'w') as csvoutput: 
      reader, reader2, reader3 = csv.reader(csvinput, csvinput2, csvinput3)            #1: Decision Forest, 2: Boosted Decision Tree, 3: ANN 
      writer = csv.DictWriter(csvoutput, lineterminator='\n', fieldnames = ['oldRMSE', 'Decision Forest Regression RMSE', 'Boosted Decision Tree Regression RMSE', 'Neural Network Regression RMSE', 'Old Accurate Predictions', 'Old Inaccurate Predictions', 'Decision Forest Accurate Predictions', 'Decision Forest Inaccurate Predictions', 'Boosted Decision Tree Accurate Predictions', 'Boosted Decision Tree Inaccurate Predictions', 'Neural Network Accurate Predictions', 'Neural Network Inaccurate Predictions']) 

      ####################################### 
      #For Decision Forest Predictions 
      headerline = next(reader) 
      emptyl=[] 
      for row in reader: 
       emptyl.append(row) 

      #Calculate RMSE 
      DecFSqResidSum = 0 
      for row in emptyl: 
       for cell in row: 
        if cell == row[-3]: 
         DecFSqResidSum = float(cell) + DecFSqResidSum 
      DecFSqResidAvg = DecFSqResidSum/len(emptyl) 
      DecForest_RMSE = np.sqrt(DecFSqResidAvg) 

      #Constructing No. of Correct/Incorrect Predictions 
      DecisionForest_Accurate = 0 
      DecisionForest_Inaccurate = 0 
      Old_Accurate = 0 
      Old_Inaccurate = 0 
      for row in emptyl: 
       for cell in row: 
        if cell == row[-2] and 'Accurate' in cell: 
         Old_Accurate += 1 
        else: 
         Old_Inaccurate += 1 
        if cell == row[-1] and 'Accurate' in cell: 
         DecisionForest_Accurate += 1 
        else: 
         DecisionForest_Inaccurate += 1 


      ###################################### 
      #For Boosted Decision Tree 
      headerline2 = next(reader2) 
      emptyl2=[]          #make new csv file(list) from csv reader 
      for row in reader2: 
       emptyl2.append(row) 

      #Calculate RMSE 
      OldSqResidSum = 0 
      BoostDTSqResidSum = 0 
      for row in emptyl2:        #make Sum of Squared Residuals 
       for cell in row: 
        if cell == row[-4]: 
         OldSqResidSum = float(cell) + OldSqResidSum 
        if cell == row[-3]: 
         BoostDTSqResidSum = float(cell) + BoostDTSqResidSum 
      OldSqResidAvg = OldSqResidSum/len(emptyl2) #divide by N to get average 
      BoostDTResidAvg = BoostDTSqResidSum/len(emptyl2) 
      oldRMSE = np.sqrt(OldSqResidAvg)    #calculate RMSE of ESTARRTIME & Boosted Decision Tree 
      BoostedDecTree_RMSE = np.sqrt(BoostDTResidAvg) 

      #Constructing Correct/Incorrect Predictions 
      BoostedDT_Accurate = 0 
      BoostedDT_Inaccurate = 0 
      for row in emptyl2: 
        if cell == row[-1] and 'Accurate' in cell: 
         BoostedDT_Accurate += 1 
        else: 
         BoostedDT_Inaccurate += 1 



      ###################################### 
      #For Artificial Neural Network (ANN) Predictions 
      headerline3 = next(reader3) 
      emptyl3=[] 
      for row in reader3: 
       emptyl3.append(row) 

      #Calculate RMSE 
      ANNSqResidSum = 0 
      for row in emptyl3: 
       for cell in row: 
        if cell == row[-3]: 
         ANNSqResidSum = float(cell) + ANNSqResidSum 
      ANNSqResidAvg = ANNSqResidSum/len(emptyl3) 
      ANN_RMSE = np.sqrt(ANNSqResidAvg) 

      #Constructing Correct/Incorrect Predictions 
      ANN_Accurate = 0 
      ANN_Inaccurate = 0 
      for row in emptyl3: 
       for cell in row: 
        if cell == row[-1] and 'Accurate' in cell: 
         ANN_Accurate += 1 
        else: 
         ANN_Inaccurate += 1 



      #Compile the Error Measures 
      finalcsv = [] 
      finalcsv.append(oldRMSE) 
      finalcsv.append(DecForest_RMSE) 
      finalcsv.append(BoostedDecTree_RMSE) 
      finalcsv.append(ANN_RMSE) 
      finalcsv.append(Old_Accurate) 
      finalcsv.append(Old_Inaccurate) 
      finalcsv.append(DecisionForest_Accurate) 
      finalcsv.append(DecisionForest_Inaccurate) 
      finalcsv.append(BoostedDT_Accurate) 
      finalcsv.append(BoostedDT_Inaccurate) 
      finalcsv.append(ANN_Accurate) 
      finalcsv.append(ANN_Inaccurate) 



      #Write the Final Comparison file 
      writer.writeheader() 
      writer.writerows({'oldRMSE': row[0], 'Decision Forest Regression RMSE': row[1], 'Boosted Decision Tree Regression RMSE': row[2], 'Neural Network Regression RMSE': row[3], 'Old Accurate Predictions': row[4], 'Old Inaccurate Predictions': row[5], 'Decision Forest Accurate Predictions': row[6], 'Decision Forest Inaccurate Predictions': row[7], 'Boosted Decision Tree Accurate Predictions': row[8], 'Boosted Decision Tree Inaccurate Predictions': row[9], 'Neural Network Accurate Predictions': row[10], 'Neural Network Inaccurate Predictions': row[11]} for row in np.nditer(finalcsv)) 


main() 

答えて

0

デフのinit(自己、no_of_files)を呼び出すことによって Calculate_RMSE_Assess_Modelsインスタンスを作成するときにno_of_filesにのparamsを与える必要があります。

0

あなたはnumber_of_files()out_path()の署名にselfを追加する必要がある、とopen_read_write_file()

class Calculate_RMSE_Assess_Models: 

    def __init__(self, no_of_files): 
     self.no_of_files = no_of_files 

    def number_of_files(): 
     numfiles = input("Enter the number of files to iterate through: ") 
     numfilesnumber = int(numfiles) 
     return numfilesnumber 

    def pathlist(self): 
     filepathlist = [] 
     while self.no_of_files > 0:    #self.number_of_files 
      path = input("Enter the filepath of the input file: ") 
      filepathlist.append(path) 
      no_of_files = no_of_files - 1 
     return filepathlist 

    def out_path(self): 
     path = input("Enter the file path of output path: ") 
     return path 


    def open_read_write_files(self): 
     pass 

をしかし、あなたはクラス内の関数の特性を保持したい場合、あなたはclassmethodデコレータを使用することができます。

class Calculate_RMSE_Assess_Models: 

    def __init__(self, no_of_files): 
     self.no_of_files = no_of_files 
    @classmethod 
    def number_of_files(cls): 
     numfiles = input("Enter the number of files to iterate through: ") 
     numfilesnumber = int(numfiles) 
     return numfilesnumber 

    def pathlist(self): 
     filepathlist = [] 
     while self.no_of_files > 0:    #self.number_of_files 
      path = input("Enter the filepath of the input file: ") 
      filepathlist.append(path) 
      no_of_files = no_of_files - 1 
     return filepathlist 
    @classmethod 
    def out_path(cls): 
     path = input("Enter the file path of output path: ") 
     return path 

    @classmethod 
    def open_read_write_files(cls): 
     pass 
0

クラス定義には、list_filepath = pathlist(no_of_files)があります。これはとno_of_filesselfと呼んでいます。 no_of_filesintであるため、while self.no_of_files > 0:no_of_files属性のintにアクセスしようとしています。

完全なトレースバックがこれを示しています。このような問題を見るときは、完全なTracebackを投稿すると便利です。

Traceback (most recent call last): 
    File "redacted", line 17, in <module> 
    class Calculate_RMSE_Assess_Models: 
    File "redacted", line 38, in Calculate_RMSE_Assess_Models 
    list_filepath = pathlist(no_of_files) 
    File "redacted", line 32, in pathlist 
    while self.no_of_files > 0:    #self.number_of_files 
AttributeError: 'int' object has no attribute 'no_of_files' 
+0

'トレースバック(最新の呼び出しの最後): " クラスCalculate_RMSE_Assess_Modelsで、ライン22、: ファイル" ファイル ""、43行、Calculate_RMSE_Assess_Modelsで list_filepath = pathlistに(no_of_files) ファイル "" 、37行目、パスリスト while self.no_of_files> 0: AttributeError: 'int'オブジェクトに 'no_of_files''属性がありません – Christoph

+0

OGポストに完全なトレースバックを含めなかったことを申し訳なく思っていましたが、私は手動でファイルディレクトリを削除しなければならなかったのですが、それには機密情報が含まれていました。 – Christoph

+0

私の答えは、なぜその特定のエラーが発生しているのかを説明しています。トレースバックを見るときは、頭の中を歩いてみてください。 – Galen

関連する問題