蜂鳥の一滴《余録》キーワード引数の活用
蜂鳥の一滴:Jun for Python への道《記事一覧》
《余録》キーワード引数の活用
《著》小粒ちゃん、滴《監修》小泉ひよ子とタマゴ倶楽部♪2009/04/20
■ 概要
キーワード引数を活用すると、密に関連するメソッド群を集約して…
■ 関連記事
- 。
何が問題か:密に関連するメソッド群
Smalltalk 版には、密に関連するプロトコル(メソッド群)をよく見掛けます。これらは、省略時の値を積極的に活用したいときに便利です。たとえば、openVisual: では、label: を省略すると、クラスの名前(anObject class name を指定したのと同じ)が設定されます。
Python では、キーワード引数を利用するとともに、省略時の値を設定することで、同等の機能を実現できます。すると、関連するメソッド群をひとつに集約できます。
from Jun.Goodies.Display.JunDisplayModel import * ## ---------------------------------------- class JunDisplayModel(PyoObject): ## ---------------------------------------- instance creation @classmethod def openVisual(self, anObject, label=None): """ openVisual: anObject ^self openVisual: anObject label: anObject class name openVisual: anObject label: aString | displayModel | displayModel := self visual: anObject. displayModel open. aString notNil ifTrue: [displayModel getWindow label: aString]. ^displayModel """ def label_(label): if not label: label = anObject.__class__.__name__ return label # aString = label_(label) ## ---------------------------------------- displayModel = self.class_visual(anObject) displayModel.open() if aString: displayModel._getWindow_label(aString) # @todo: provisional return displayModel
局所関数 label_ では、キーワード引数 label を省略したときの値を設定します。
aModel.openVisual(anObject) aModel.openVisual(anObject, "-- non label ---") aModel.openVisual(anObject, label="-- non label ---") aModel.openVisual(anObject, label=anObject.__class__.__name__)
すると、このような多様なメソッド呼び出しに呼応できます。ここでは、最初と最後の例は、同じ結果になります。