2017-05-25 8 views
-3

私は以下のコードが何をするのか把握するための作業があります。 python2で構築されたように見えますが、python3を使いたいと思います。 argparseをインストールして必要なファイルパスを設定しましたが、コマンドラインでプログラムを実行するたびにこれらの問題が発生します。PythonエラーNameError: 'ofclass'の名前が定義されていません

Traceback (most recent call last): 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 6, in <module> 
    class Noddy: 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 63, in Noddy 
    if __name__ == '__main__': main() 
    File "C:\Users\Name\pythonScripts\Noddy.py", line 57, in main 
    ent = Noddy.make(fools) 
NameError: name 'Noddy' is not defined 

コードは以下のとおりです。

#! python3 


class Noddy: 
    def __init__(self, x): 
     self.ant = None 
     self.dec = None 
     self.holder = x 

    @classmethod 
    def make(self, l): 
     ent = Noddy(l.pop(0)) 
     for x in l: 
      ent.scrobble(x) 
     return ent 

    def scrobble(self, x): 
     if self.holder > x: 
      if self.ant is None: 
       self.ant = Noddy(x) 
      else: 
       self.ant.scrobble(x) 
     else: 
      if self.dec is None: 
       self.dec = Noddy(x) 
      else: 
       self.dec.scrobble(x) 

    def bubble(self): 
     if self.ant: 
      for x in self.ant.bubble(): 
       yield x 
      yield self.holder 
      if self.dec: 
       for x in self.dec.bubble(): 
        yield x 

    def bobble(self): 
     yield self.holder 
     if self.ant: 
      for x in self.ant.bobble(): 
       yield x 
     if self.dec: 
      for x in self.dec.bobble(): 
       yield x 

    def main(): 
     import argparse 
     ap = argparse.ArgumentParser() 
     ap.add_argument("foo") 
     args = ap.parse_args() 

     foo = open(args.foo) 
     fools = [int(bar) for bar in foo] 
     ent = Noddy.make(fools) 

     print(list(ent.bubble())) 
     print 
     print(list(ent.bobble())) 

    if __name__ == '__main__': main() 
+0

エラー全体を含めましたか?私はスタックトレースを見るだけですか? – OptimusCrime

+0

@classmethodをselfとともに使用するとエラーになります。代わりにclsを使用してください。 –

+0

フルエラーで更新 –

答えて

0

あなたdef main()if __name__=='__main__'あなたのクラス内に記述されています。インタープリタは、クラス定義が完了するまでクラスNoddyが存在しないため、クラスを定義している間にインタプリタを実行しようとしますが、実行できません。

mainのものがの外側になるようにインデントを固定します。

class Noddy: 
    def __init__(self, x): 
     self.ant = None 
     self.dec = None 
     self.holder = x 
    # other methods INSIDE the class 
    # ... 

# Notice the indentation — this function is OUTSIDE the class 
def main(): 
    # whatever main is supposed to do 
    # ... 

if __name__=='__main__': 
    main() 
関連する問題