<Python> import
import
って、ある特定ディレクトリの下のファイルを読み込んでいるかと思ってた。
そうじゃなくて(そうじゃないよー byミトメン) オブジェクトを読み込んでるっぽい。
ディレクトリaaa
にファイル__init__.py
があった場合。
[0:hage:~]>ls aaa/ [1:hage:~]>cd aaa/ __init__.py __pycache__/ [2:hage:~]>vim __init__.py
で、__init__.py
の中身は、
import pandas as pd df = pd.DataFrame(data=[1, 2, 3]) class bbb(): def __init__(self): self.x = 0 self.y = 0 def __all__(self): return [self.x, self.y] B = bbb()
これで、aaa
の上のディレクトリから、ipython
すると、、
In [1]: from aaa import df In [2]: from aaa import B In [4]: whos Variable Type Data/Info --------------------------------- B bbb <aaa.bbb object at 0x00000000049D40F0> df DataFrame 0\n0 1\n1 2\n2 3 In [6]: B.x Out[6]: 0 In [7]: df Out[7]: 0 0 1 1 2 2 3
なるほど、、、
___init__.py
内のオブジェクトが呼ばれてる。
なら、aaa
を呼んだ場合は、
In [8]: import aaa In [9]: whos Variable Type Data/Info --------------------------------- B bbb <aaa.bbb object at 0x00000000049D40F0> aaa module <module 'aaa' from 'C:\\m<...>_play\\aaa\\__init__.py'> df DataFrame 0\n0 1\n1 2\n2 3 In [10]: aaa.df Out[10]: 0 0 1 1 2 2 3
なる、、かなりわかったなり。
なら、__init__.py
を名前変えて、bbb.py
としたら、、、
[3:hage:~]>mv __init__.py bbb.py
In [1]: import aaa In [2]: whos Variable Type Data/Info ------------------------------ aaa module <module 'aaa' (namespace)> In [3]: dir(aaa) Out[3]: ['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
なんだか空っぽい。
なら、、、
In [4]: import aaa.bbb In [5]: whos Variable Type Data/Info ------------------------------ aaa module <module 'aaa' (namespace)> In [6]: dir(aaa.bbb) Out[6]: ['B', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'bbb', 'df', 'pd'] In [7]: aaa.bbb.B Out[7]: <aaa.bbb.bbb at 0x4716e10> In [8]: aaa.bbb.B.x Out[8]: 0
呼び出せた。
なるほど。。。
ちとわかった気がする。
マニュアル