私はツールを開発しましたが、別のアプリケーションで使用したいと思います。さて、私は新しいアプリケーションで自分のツールをコピーするだけです。ファイルの構造は以下の通りです。isinstanceはネストされたアプリケーションで不適切な結果を返します
.
├── inner
│ ├── a
│ │ ├── a.py
│ │ └── __init__.py
│ ├── b
│ │ ├── b.py
│ │ └── __init__.py
│ ├── __init__.py
│ └── inner.py
└── outer.py
a.py
class A(object):
def output(self):
print('A')
b.py
from a.a import A
class B(object):
def output(self, a):
print('B')
print(isinstance(a, A))
inner.py
from a.a import A
from b.b import B
a = A()
b = B()
a.output()
b.output(a)
B.outputが第二引数Aがインスタンスであるかどうかをチェックする
クラスAのランニングinner.py
ランニング私は私の新しいアプリケーションフォルダの下に、ほぼ同じコードouter.py
を実行すると、ER inner
が、しかし出力に
A
B
True
を与え、出力が期待されていません。
A
B
False
outer.py
import sys
sys.path.append('inner')
if __name__ == '__main__':
from inner.a.a import A
from inner.b.b import B
a = A()
b = B()
a.output()
b.output(a)
私はouter.pyでprint(a)
を追加すると、私は<inner.a.a.A object at 0x7f45e179f2d0>
、ないa.a.A object
を取得します。
isinstance
が正しい結果を返すように内部アプリケーションを統合する方法が不思議ですか? inner
の下にあるすべてのフォルダをsys.path
に追加しますか?もしそうなら、私は型検出を削除することを選択します。
私はこれまでに一度も知りませんでした!しかし、 'inner/b/b.py'の最初の行を' from inner.a.a import A'で 'inner.py'を実行するように変更する必要があります。それは最初の時点でツール名を指定する唯一の方法ですか? –
@AnttiHaapalaこの音は面白いです。あなたは例を共有することはできますか?私はあなたの提案をよりよく理解しようとしています – Vinny