Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonにおける関数の属性の使い方

Pythonの関数の属性についての注意点

Pythonにおける関数の属性の使い方の解説と注意点

Pythonの関数は、その関数内部においてその関数自身の属性(attribute)を設定できますが、今回はその関数の属性にアクセスする場合の注意点の説明です。

関数自身に属性を設定する方法

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の情報については、このようにエラーとなります。

変数へのアクセス方法エラーの内容
aNameError: name ‘a’ is not defined
f1.aAttributeError: ‘function’ object has no attribute ‘a’

このようにエラーの内容が異なっている点にも注意してください。