私はPythonをオンラインでDive Into Pythonと読んで学習しています。第2章では、テスト目的で__name__
属性を使用できることが分かりました。誰でもこの属性の他の用途について知っていますか? ?ありがとう__name__属性のその他の使用
3
A
答えて
3
私はかつてコマンドラインスクリプトファイルのデコレータを持っていました。
デコレータは次のように使用された:
@command
def someFunc():
# code goes here
デコレータは、このような何かやっていた:
commands = {}
def command(func)
commands[func.__name__] = func
return func
をそして私はこのような何か行うことができます:
commandName = raw_input()
commands[commandName]();
以前にデコレータでラベルが付けられていた場合は、コンソールからコマンド名を読み込み、それを呼び出すことになりますinput
のように危険な呼び出しが可能です)。
(私のコードでは名前は、コマンドライン引数、ないraw_input
から取られました。)
これは、簡単に、私は自分の名前を介してアクセスするコマンドを提供してみましょう。これは用途の1つです。一般的なルールは"関数定義の概念に独自のセマンティクスを追加する場合に便利です"。一般的なデコレータにも同じことが言えます。
(ところで、私の知る限り、__
で始まる識別子はPythonで民間ことになっているので、func.__name__
を使用するより正確であるfunc.func_name
フィールド、あります - ちょうどマイナーなディテールが)
1
それは非常に便利ですデバッグ時。フレームワーク(またはその他の非常に汎用的なソフトウェア)を書くときは、の名前を使って簡単にデバッグして、何が流れているのかを知ることができます。
関連する問題
- 1. アニメーションやその他の属性にダブルベンダープレフィックスを使用する
- 2. UIImageとその他の属性を使用してカスタムイメージを作成する
- 3. なぜpythonインスタンスに__name__属性がないのですか?
- 4. その他の情報HTML要素の属性
- 5. 以下のXMLでパスワードやその他の属性をc#
- 6. 証明書KeyContainerNameおよびその他の属性
- 7. 他の属性のコード内からの属性のテスト
- 8. AttributeError: 'str'オブジェクトに '__name__'属性がありません
- 9. Pthreadの属性の使用
- 10. beginInvokeとDebuggerStepThroughAttributeと他の属性を使用する理由
- 11. 他の属性で始まらない属性のXPathクエリ
- 12. Yii2 GridView - 他の属性の値に基づく属性形式
- 13. 他のカスタム属性からカスタム属性のバインディングにアクセスする
- 14. ExpectedException属性の使用
- 15. Pythonクラス属性の使用
- 16. [bazel] restricted_to属性の使用
- 17. カスタム属性の使用
- 18. 属性の使用... INotifyPropertyChanged
- 19. MSTest属性の使用
- 20. 工場の定義では、他の工場の属性を使用して属性を割り当てます。
- 21. JQuery同じ要素の他の属性を使用して要素の属性を設定する方法
- 22. の変更テキストの他の属性
- 23. AttributeError:(Class)オブジェクトに属性 '__name__'がありませんModelFormsの作成[Django&Python2.7]
- 24. 属性ディレクティブから他の属性ディレクティブにアクセスする
- 25. クラス属性を他の(同じ属性)クラスにマッピング
- 26. 他の属性値で属性を動的に作成する
- 27. <c:if>タグでのvar属性とscope属性の使用
- 28. 他の属性を述語として使用するXSLT/XPATH属性の選択
- 29. 他の属性名のjQuery hasClass
- 30. jQueryを使用して要素idやその他の属性にアクセスするには?
偉大な、私はまだfunc.func_nameのチップのおかげで言ったことを完全に理解する必要があります。 –
関数には '__name__'があることに注意してください。あなたが最初に見つけた '__name__'はモジュールにあり、その名前はインポートされたものであるか、または初期の呼び出されたモジュールのための' '__main __ ''です。いずれの場合でも、 'sys.modules [__ name __]'は現在のモジュールです。 –