私はpython 3.5を使用しています。 Pythonにはまったく新しいが、プログラミングには新しくない。棚からのクラス定義
c.py
class C:
def __init__(self, x):
self.x = x
def method(self):
print(self.x)
import shelve
from c import C
db = shelve.open("DB")
db['key1'] = C("test")
db.close()
init.py test.py
を次のように私は(私が実際にやっているの多くの簡易版)の3つのソースファイルを持っています
import shelve
db = shelve.open("DB")
obj = db['key1']
obj.method() # this works
C.method(obj) # this doesn't -- 'C' not defined
db.close()
私はシェルビルドされたデータベースを設定するためにinit.pyを実行します。それから私はtest.pyを実行します。 obj.method()を実行することに満足しているので、明示的にインポートしていなくてもクラスCについて知っているようです(Lutzはデータベースに格納されていることを述べています)。しかし、私がCメソッド(obj)をしようとすると(私は必ずしもこのように呼び出す必要はありませんが、新しいオブジェクトを作成するためのクラスとしてCを使用することはその有用性を持っています)定義されていません。しかし、 'c import C'をtest.pyに追加すると動作します。ですから、ある意味ではCの定義について知っているようですが、やはりそうではありません。私はなぜこれが知りたいのか不思議です。
:これらの行(Pythonの3.5.1でテスト済み)に沿って何か -
回避策問題のため、手動でのモジュールからクラスをインポートし、名前
C
にクラスを割り当てることであろうルッツですか?確かにあなたは 'from C import C 'を意味しないのですか?モジュールまたは組み込みでまだ定義されていないすべての名前をインポートする必要があります。 – Kupiakosはい、私は 'from import C'を意味しました。それを修正します。なぜ私は1つのケースでインポートする必要はないが、もう1つのケースでインポートする必要があるのか不思議です。それは私の直感に反するようです。 – Lance
_ Mark Lutz著Python_プログラミング、O'Reilly発行 – Lance