質問: ### 問題の概要 script.pyというファイルにクラスを定義し、script2.pyでimportしたかったのですがうまくいきません。僕が勉強した知識では、下記のコードでうまくいくはずなのですが...。 ### 発生している問題・エラーメッセージ ``` Traceback (most recent call last): File "/Users/takahamadaisuke/Desktop/prog_lesson/script2.py", line 2, in item1=MenuItem("tea",151) NameError: name 'MenuItem' is not defined ``` ### 該当のソースコード ``` #script.pyでは class MenuItem: def __init__(self,name,price): self.name=name self.price=price def inform(self): print(self.name+""+str(self.price)) class Bakabon: def __init__(self): print("That's OK") -------------------------------------------------------- #script2.pyでは import script item1=MenuItem("tea",151) item1.inform() item2=Bakabon() ``` ### こうしたらうまくいった 上のファイルのscript2.pyでインスタンス生成の行を item1=script.MenuItem("tea",151) item2=script.Bakabon() としたらうまくいった。 また最初の状態からimportの部分を from script import MenuItem from script import Bakabon としてもうまくいった。 ### ご回答のほどよろしくお願いします
回答: そういう仕様です。 `import script`だと、`script`という変数が作成され、モジュールを参照できます。`from script import MenuItem`などとすると、更に`script`モジュール内の`MenuItem`という属性が取り出され、同じ名前でアクセスできるようになります。 `import script`だけで`MenuItem`を直接参照できるようにはなりません。