2017-08-07 129 views
-2

我有一個類:範圍類蟒蛇

class Difference: 
    def __init__(self,a1): 
     self.a1=a1 
    def computeDifference(self): 
     d0=max([max(self.a1)-i for i in self.a1]) 
     return d0 
     maximumDifference=d0 

現在,當我嘗試訪問像波紋管得到波紋錯誤類:

_ = input().strip() 
a = [int(e) for e in input().strip().split(' ')] 
d = Difference(a) 
d.computeDifference() 
print(d.maximumDifference) 

錯誤:

Traceback (most recent call last): File "q.py", line 2, in class Difference: File "q.py", line 8, in Difference maximumDifference=d0 NameError: name 'd0' is not defined

什麼出錯?

+0

你從來沒有告訴pytho什麼'd0'是,當你嘗試設置'maximumDifference'到'd0'蟒蛇拋出你的錯誤的內部屬性。在類中定義'd0''Difference'來避免錯誤 –

回答

0

有幾件事情:

  1. 您需要定義d0是什麼之前,你可以把它分配給maximumDifference
  2. 即使您確實定義了d0並嘗試將其分配給maximumDifference也不會到達,因爲該行在return狀態員之後。
  3. 不正確的縮進,但這可能就是你如何發佈你的問題。我編輯你的問題解決了壓痕錯誤

你可以做這樣的事情來解決上述問題:

def computeDifference(self): 
     d0=max([max(self.a1)-i for i in self.a1]) 
     self.maximumDifference=d0 
     return d0 

上面的代碼會工作,但它是不是很好的做法,外界定義屬性的__init__。這是更好地定義類__init__

class Difference: 

    def __init__(self,a1): 
     self.a1=a1 
     self.maximumDifference = self.computeDifference() 
    def computeDifference(self): 
     d0=max([max(self.a1)-i for i in self.a1]) 
     return d0 
0

你的問題是縮進。爲了正常工作,Python代碼必須很好地縮進。嘗試:

class Difference: 

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

    def computeDifference(self): 
     d0=max([max(self.a1)-i for i in self.a1]) 
     self.maximumDifference=d0 
     return d0 

還行maximumDifference=d0永遠不會因爲它被放置在返回後達到,而且即使它是,因爲您只使用本地代碼是行不通的。要在該功能之外存儲並使用maximumDifference,應將其存儲在self.maximumDifference之中,如上例所示。