2016-10-25 7 views
0

私は2つのファイルがあります。別のファイルからクラスを継承する方法は?

fig.py

import math 
PI=math.pi 

class Fig: 
    def __init__(self): 
     self.name= " " 

そして

circle.py

class Circle(Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

をしかし、私は、私はjupyter-ノートがエラーをスローし、それをしようとするたびに彼らに私をロードしようとしています:

NameError: name 'Fig' is not defined

import figcircle.pyに変更しようとしましたが、うまく動作せず、どちらのファイルも実行されていません。それらは両方とも同じディレクトリにあります。

答えて

6

[OK]を、しかしは、ここに私の推測です。

import fig 
class Circle(Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

を次のようにあなたのcircle.pyファイルがある場合はPythonはどこFigを見つけるために知っていないので、これが解除されます。代わりにあなたが

import fig 
class Circle(fig.Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

または

を記述する場合
from fig import Fig 
class Circle(fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 

すべてが正常に動作する必要があります。これは、Pythonにクラスにアクセスするための名前空間(私の最初の解決策)か、明示的にクラスをインポートする(私の2番目の解決策)かのどちらかを伝える必要があるからです。

import fig 
class Circle(fig.Fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 
     #use PI from fig.py by informing python of namespace 
     self.circumference = 2.*fig.PI*radius 

または

from fig import Fig, PI 
class Circle(fig): 
    def __init__(self, radius): 
     self.name= "Circle" 
     self.data= ["Radius: ", radius] 
     #PI is now explicitly imported so don't need namespace 
     self.circumference = 2.*PI*radius 
+0

両方のオプションの継承は機能しますが、最初の2行は機能しません。I *が円を描く場合* PIは定義されていません。両方を実行すると、* SyntaxError:構文が無効です*。 – D1X

2

circle.pyfrom fig import FIGを入力する必要があります。また、__init__.pyファイルがcircle.pyのフォルダにあることを確認してください。fig.py

もで見てみてください:あなたは何をしているか正確に私たちを送信していないので、それが間違って何が起こっているのか、正確には明らかではありません

0

あなたはcircle.pyfig.pyからクラスFigをインポートする必要があります:あなたはPIを使用したい場合は、同じロジックが適用されます。

あなただけのモジュールfigをインポートする場合は、それぞれの名前空間を通じてクラスFigにアクセスする必要があります。

class Circle(fig.Fig): 
    <snip> 

あなたが直接クラス名を使用したい場合は、from fig import Figを使用して、それをインポートします。

関連する問題