python类中的作用域

时间:2017-08-07 19:31:34

标签: python python-3.x class

我有一个班级:

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)

错误:

  

追踪(最近一次通话):       文件" q.py",第2行,in        班级差异:        文件" q.py",第8行,差异         maximumDifference = D0        NameError:name' d0'未定义

出了什么问题?

2 个答案:

答案 0 :(得分: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中,如上例所示。

答案 1 :(得分:0)

一些事情:

  1. 您需要先定义d0之前的内容,然后才能将其分配给maximumDifference
  2. 即使您确实定义了d0并尝试将其分配给maximumDifference,也不会达到它,因为该行位于return州政府之后。
  3. 缩进不正确,但这可能就是您发布问题的方式。我编辑了您的问题以修复缩进错误
  4. 你可以做这样的事情来解决上述问题:

    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