2017-12-29 9 views
0

私たちのPython 3.5アプリケーションには、in-parameters(下の例ではnew_value)のいずれかがあり得るメソッドがあります。この場合に使用できるヒント型ヒント?Python型のヒントを使って "any"型を指定する

def update(self, col_name: str, new_value) -> None:

(我々が読み、コードを容易にするために、文書化の目的のために型ヒントを希望)

グレイトフル助けを!

+4

['typing'モジュールから' Any'を使用する](https://docs.python.org/3/library/typing.html#the-any-type)。 –

答えて

1

使用したい正確に何に応じて、二つの異なるオプションがあります:

  1. あなたは基本的に完全に型チェックany_valueのオプトアウトしたいと、それは文字通りゼロと任意のタイプかもしれない示している場合制限は、typing.Anyを使用してください。例:ある

    from typing import Any 
    
    class MyThing: 
        def update(self, col_name: str, new_value: Any) -> None: 
         # Note: this typechecks; new_value can be anything, and 
         # that object might have a foo method 
         new_value.foo() 
         # ...snip... 
    
  2. あなたはnew_valueは、どのようなタイプのものとすることができることを示したいのですが、またupdate方法が唯一のこれまで完全にタイプセーフな方法でnew_valueを使用していることを確認したい場合は、私がobjectを使用することになり、 Pythonですべてのタイプの基本型:

    class MyThing: 
        def update(self, col_name: str, new_value: object) -> None: 
         # Note: this does not typecheck since new_value is of 
         # type 'object', and 'object' is not guaranteed to have 
         # a method named 'foo' 
         new_value.foo() 
         # ...snip... 
    

私は個人的にobject使用に向けたバイアス - Anyを具体的にあなたのメートルをすることができます「ブリッジ」として設計されていますあなたのプログラム内の型付き型と型なしの世界。私は個人的には、静的で動的に型指定されたメソッドではなく、それらの2つの世界をかなり区別しておくと(例えば、完全な型付けされた "コア"を複数のタイプのないコードでラップすることによって)

もちろん

、それは同様に

(我々が読み、コードを容易にするために、文書化の目的のために型ヒントを希望)

...これを実行することは常に可能ではありません他に/ヒントを使用する場合は、開発プロセスの一部としてmypyのようなツールを使用してコードをタイプチェックすることを強く推奨します。

ドキュメントのタイプヒントを使用すると効果的ですが、コードがドキュメントに準拠していないと非常に混乱する可能性があります。これらのタイプヒントを使用してコードを自動的に型チェックするためのツールがあるので、同様に(そしてその余分な保証を得ることも)可能性があります。

(実践的、すべてを一度にあなたの全体のコードベースをです。TypeCheckしようとすると、ノイズの多くにつながることができます - 何をしようとすると、代わりに行うことができますが、徐々にあるあなたのコードベースをです。TypeCheckたとえば、あなただけです。TypeCheckするmypyを設定することができます。 (時間がたつにつれて成長するかもしれない)ファイルのセットリスト、特定のチェックをより厳密にするか緩くするか(おそらくファイルごとに)など、これは上記の「型付きコア、型なしラッパー」戦略)

関連する問題