Pythonのnamedtupleにデフォルト値を設定してオブジェクト化する方法

記事内に広告が含まれています。

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にデフォルト値を設定してオブジェクト化する方法でした。

タイトルとURLをコピーしました