尝试调用类方法时出现NameError问题

时间:2016-04-14 07:38:56

标签: python function class

特别是在使用类并调用它时遇到问题。 它是三角形程序的最高和路径..但​​是我的课程和调用函数存在问题。

具体..

<Setter Property="ItemContainerStyle">
    <Setter.Value>
        <Style TargetType="ComboBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ComboBoxItem">
                        <Border Background="{TemplateBinding Background}" BorderThickness="0" Margin="2">
                            <TextBlock Text="{TemplateBinding Content}" Margin="2" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>

            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Setter.Value>
</Setter>

错误是说没有定义三角形。 我的错误可能在哪里?这个课程还有很多功能。但这是我目前的错误,谢谢。 列表就像

class TriArray():
     triangle = read_input("inputt.txt")
     def get_data(node):
         return triangle[node.row][node.col]
def main():
      triangle = TriArray()

node = triangle.get_root()         #*added these to the question
path_sum = triangle.get_data()


def read_input(filename):           #*so you can see
  triangle = []
  with open(filename, 'r') as fin:
      rows = fin.readline()
      for line in fin:
          for word in rows.split():
              triangle.append([int(i) for i in line.split()])
              print(triangle)

如果相关..

5 个答案:

答案 0 :(得分:3)

您的代码中存在一些问题。

  • 您应该定义triangle,如triangle = TriArray()
  • get_data需要node参数,但您没有发送。
  • 您缺少自我参数。
  • read_input未定义。

你可以像这样解决,

class TriArray():
   triangle = None 

   def read_input(self):
     with open('inputt.txt', 'r') as f:
        self.triangle = f.read()

   def get_data(self, node):
     self.read_input()
     return self.triangle[node.row][node.col]

triangle = TriArray()
# you have to define and sent node parameter
# node = ??
path_sum = triangle.get_data(node)

答案 1 :(得分:0)

class TriArray():
     triangle = read_input("inputt.txt")
     def get_data(node):
         return triangle[node.row][node.col]

triangle = TriArray()
path_sum = triangle.get_data()

试试这个

答案 2 :(得分:0)

为了调用类方法,您必须首先实例化它:

path_sum = TriArray().get_data(node)

答案 3 :(得分:0)

您尚未创建该类的实例。代码的类部分只定义了一个类,但没有实例化它。

通过插入

创建实例
triangle = TriArray()

在最后一行之前。

编辑:在修改后的代码中,您可以在main函数中创建一个实例。但是,该实例不是主要功能之外的visiblke。您必须在与使用它的位置相同的范围内创建实例。

答案 4 :(得分:0)

您可以定义这样的类,这很好。但是如果没有类的实际实例,triangle将保留一个未在外部定义的内部值。这就是NameError

的原因

根据您的编辑,我们看到有一个实例化。但这发生在main函数内;这个功能之外的其他部分仍然没有看到它。

一种方法是将path_sum放在main函数中,如下所示:

class TriArray():

    def get_data(node):
        return triangle[node.row][node.col]

    def read_input(filename):
        triangle = []
        with open(filename, 'r') as fin:
            rows = fin.readline()
            for line in fin:
                for word in rows.split():
                    triangle.append([int(i) for i in line.split()])
                    print(triangle)

    triangle = read_input("inputt.txt")

def main():
    # let's assume node is defined and node.row = 0, node.col = 1
    triangle = TriArray()
    path_sum = triangle.get_data(node) # brought in from the cold

这当然意味着,对于任何事情,您需要实际调用main函数。您还会注意到我已将read_input转移到类中并在调用之前,因此在尝试调用NameError时不会有read_input