Python ** Asterisk

PyGI のオブジェクトは作成時の引数にて

#!/usr/bin/env python3

from gi.repository import Gtk

win = Gtk.Window(title="Test", default_width=500)
win.connect("delete-event", Gtk.main_quit)
win.show()
Gtk.main()

というように property を引数で指定できる。
今まであまり気にしていなかったけど、つまりこういうことだと気が付いた。

#!/usr/bin/env python3

from gi.repository import Gtk

class Win (Gtk.Window):
    def __init__(self, **args):
        #Gtk.Window.__init__(self, **args)
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        # Own Property set
        for key, value in args.items():
            self.set_property(key, value)
        self.show()

Win(title="Test", default_width=500)
Gtk.main()

アスタリスク二つだと未定義キーワードの引数を受け取れるのは有名かと。
未定義キーワードは文字列になり辞書として扱える。
こういう本当に有用な形で実装されると「うわー便利!」と実感できますね。
今まで使い道が解らなかっただけだったりするけど。

こんなに便利なら IronPython でも同様にしてやろうと思ったけど…

import wpf
from System.Windows import *

win = Window(Title="Titlebar", Width=300, Height=100)
app = Application()
app.run(win)

既に実装されていた。
IronPython の開発者恐るべし。