2017-08-07 93 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之中,如上例所示。