何が起こったか
ある自作モジュール(fruits.py)の中にある,複数のclass(Apple, Orange, Grape)をimport fruits
で読み込もうとした時の勘違いをメモ.
参考:http://www.python-izm.com/contents/basis/import.shtml
今回の勘違い
以下のようなモジュールがあるとする.
fruits.py
class Apple():
def hoge():
pass
class Orange():
def hoge():
pass
class Grape():
def hoge():
pass
このモジュール内のクラスをimport fruits
で読み込んで,インスタンスを作成しようとしたところ,以下のエラーが出た.
>>> import fruits
>>> apple = Apple()
>>> type(apple)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Apple' is not defined
正しくは,モジュール名.クラス
のように扱う.今回の勘違いはimport モジュール
でtype(クラス名)
のように扱おうとしたことが原因だった.
>>> import fruits
>>> type(fruits.Apple)
<class 'type'>
もしtype(クラス名)
のように扱う場合は,以下のようにする.
>>> from fruit import Apple
>>> type(Apple)
<Class 'type'>
追記
shiracamusさんからコメントを頂きました.
type(クラス)のようにしたい場合は,from モジュール import *
と書けば可能です.
>>> from fruit import *
>>> type(Apple)
<class 'type'>