Pythonにはnamedtupleという名前を指定してtupleを作成するモジュールがあります。
そのnamedtupleでオブジェクトを生成するタイミングで、それぞれの属性にデフォルト値を設定する方法です。
namedtupleにデフォルト値を設定してオブジェクト化する
Pythonにはnamedtupleがあり、自由にdictのようにKey名を設定できる機能があります。
namedtupleの基本的な使い方
通常のtupleは
t = (0, 1, 2) print( t[ 0 ] )
のようにそれぞれのKeyに名前は付けれません。
またdictは
d = dict( "name0":"0", "name1":"1", "name2":"2") print( d[ "name0" ] )
のように名前は付けれますが、アクセスは「d.name0」のようには書けず、「d[“name0”]」と書く必要があります。
これでも良いのですが、気分的には「d.name0」のように書きたい。
それを実現してくれるのが「namedtuple」です。
from collections import namedtuple nd = namedtuple('nd', ['name0', 'name1']) def func(): return nd( name0="0", name1="1 ) ret = func() print( ret.name1 ) print( ret.name2 )
namedtupleのデフォルト値方法
ここで問題になるのはnamedtupleに含まれるキーにはこのままでは必ず値を設定しなくてはいけません。
そこでなんとしても「デフォルト値を設定したい」というこことで、設定してみます。
from collections import namedtuple nd = namedtuple('nd', ['name0', 'name1']) nd.__new__.__defaults__ = ( "0", "1" ) def func(): return nd( name0="0", name1="1" ) def func1(): return nd( name0="0" ) def func2(): return nd( name1="1", name0="0" )
とします。
namedtupleのKeyにデフォルト値を設定するには「__new__.__defaults__」を使います。
これですべてのキーを設定しなくても無事「namedtuple」を生成することができました。
当然「func2()」のように引数の順番を変更しても問題ありません。
まとめ
namedtupleにデフォルト値を設定してオブジェクト化するには「__new__.__defaults__」を使って簡単に行うことができます。
以上、Pythonのnamedtupleにデフォルト値を設定してオブジェクト化する方法でした。