Pythonの関数は、その関数内部においてその関数自身の属性(attribute)を設定できますが、今回はその関数の属性にアクセスする場合の注意点の説明です。
Contents
関数自身に属性を設定する方法
def fnc():
fnc.new_attribute = 20
というような感じです。これで、「fnc」という名前の関数自身の属性(new_attribute)を設定できました。その値は20です。
この関数自身の属性を使うときにちょっとした注意があります。それは、関数の属性にアクセする前に関数を実行しなければならない、ということです。
次の下記説明を見てください。
関数自身の属性を参照するには関数の実行が必要
では実際に上記の注意点について簡単なコードで確かめてみましょう。
エラーとなる場合:関数を実行する前に関数の属性にアクセスする場合
def f1():
f1.a = 3
f1.a #AttributeError: 'function' object has no attribute 'a'が出る
これはエラーがでます。関数f1を実行していないからです。
成功する場合:関数を実行した後に関数の属性にアクセスする場合
次に実行した場合の成功例をみましょう。
def f1():
f1.a = 3
f1() # ←関数を実行
f1.a # 3が表示
このように関数を実行してからその属性にアクセスするときちんとその情報が表示されました。
おまけ:変数のスコープについて
なお上記のコード例において関数f1の内部で、
f1.a = 3
ではなく、単に、
a = 3
として、
def f1():
a = 3
f1()
a # スコープ外のため、NameError: name 'a' is not defined
f1.a # そもそもf1.aという情報が定義できていないので、AttributeError: 'function' object has no attribute 'a'
実行すると、関数内の変数aの情報については、このようにエラーとなります。
変数へのアクセス方法 | エラーの内容 |
---|---|
a | NameError: name ‘a’ is not defined |
f1.a | AttributeError: ‘function’ object has no attribute ‘a’ |
このようにエラーの内容が異なっている点にも注意してください。
ˇ
世界最大の動画学習サイトUdemyのおすすめPython講座【PR】
- AWSで作るWEBアプリケーション 実践講座
- 現役シリコンバレーエンジニアが教えるPython
3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
- 独学で身につけるPython〜基礎編〜【業務効率化・自動化で残業を無くそう!】
- 【完全初心者向け】絶対に挫折させないPython入門講座
- 【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門
- はじめてのPython 少しずつ丁寧に学ぶプログラミング言語Python3のエッセンス
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
- 現役シリコンバレーエンジニアが教えるアルゴリズム・データ構造・コーディングテスト入門