Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
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’ |
このようにエラーの内容が異なっている点にも注意してください。