2016-03-24 15 views
-1

初期化時にオブジェクトをNoneに設定できますが、依然としてクラスに属していますか?特定のクラスのオブジェクトをNoneとして定義します。

class Foo: 
    def do_stuff(): 
     pass 

bar_1 = Foo() 
bar_2 = None 

私が考えている特定の目的は、私はbar_2が異なるモジュールaccross利用可能であってもよいが、(無関係な理由のために)後日、それを定義したいということです。あなたがコードを実行するとうまく動作します。しかし、私のIDEは、bar_2がタイプFooであることを知らないので、は、たとえば、bar_1のように自動補完オプションとして表示されません。

私はPythonが強く型付けされた言語ではないことを理解していますが、bar_2FooであることをPythonに伝える方法があれば、自動補完の問題は解決しません。

私のIDE(PyCharm、具体的にはbar_2のクラスを認識させるための別の方法がある場合は、わかりました)。これは非常に良い方法ではありませんあなたは一般的に

assert isinstance(bar_2,Foo) 
# anything below this and in scope will autocomplete bar_2 with Foo's methods 

を行うことができますFOOのインスタンスであるために仮定されており、避けるべきであるが、それは最も IDEの中でオートコンプリートを有効にするために働く

+0

bar2とは何ですか? –

+0

現在のコードでは、 'bar_2'は' Foo'タイプではありません。 'Foo'にするには、それをそのように定義する必要があります。初期化を遅らせる必要がある場合は、遅延させたいアクションを実行する '__init__'以外のメソッドを作成し、準備ができたら呼び出します。 – ChrisP

答えて

1

Python 3.5を使用している場合は、タイプヒントを使用できます。この特定の用途のために、あなたはtype commentでそれを配置する必要があるだろう:パイソンの

bar_2 = None # type: Foo 

以前のバージョンは、これを行うための組み込み方法を持っていない、私は両方とも以前とそれ以降のバージョンをサポートIDEを仮定してもあなたが使用しているPythonのバージョンが完全なタイプのヒントのセマンティクスをサポートしていなくても、タイプのコメントがその動作に影響を与えることを可能にするかもしれません。

0

( pycharmが含まれています)

1

type hintsタイプが一貫し、あなたがpython 3.5を使用していると仮定してください。

インテリセンス完了を得るにはJetBrainsにはlegacy typeヒントシステムがあり、これはすべてのバージョンのPythonで動作するはずです。

+0

良い答え:)(彼はpython3.5を使用するチャンスはスリムですが)(私は古いタイプのヒントをつけることについては全く知らなかったし、新しいものを学ぶためには常にクール) –

+0

良い点、私は明確化を追加します。 –

関連する問題