Engineer as a Lifestyle @tenkoma

What We Find Changes Who We Become -- Peter Morville著『アンビエント・ファインダビリティ 』

Duck Typing

追記 2006/9/18 たぶん勘違いしていたので書き直しました.

まつもと直伝 プログラミングのオキテ - まつもと直伝 プログラミングのオキテ 第4回(3):ITpro

>>> class hoge:
	pass

>>> h = hoge()
>>> fuga = 1; foo = 'hatena'; bar = u'hatena'
>>> d = {'hoge':hoge,'fuga':fuga,'foo':foo,'bar':bar}
>>> for i in d.keys():
	if not type(d[i]) == str:			#後述のコードで書き直しました.
		print '%s is not str instance' % i

		
fuga is not str instance
bar is not str instance
hoge is not str instance
>>> for i in d.keys():
	if not '__str__' in dir(d[i]):			#後述のコードで書き直しました.
		print '%s can\'t output str' % i

		
hoge can't output str

Pythonで言えば上のforブロックと下のforブロックの違いであってるのかな?

追記 2006/9/18 型チェックはisinstance関数を使った方がいいし,属性チェックにはhasattr関数があるので

>>> class hoge:
	pass

>>> h = hoge()
>>> fuga = 1; foo = 'hatena'; bar = u'hatena'
>>> d = {'hoge':hoge,'fuga':fuga,'foo':foo,'bar':bar}
>>> for i in d.keys():
	if not isinstance(d[i], str):
		print '%s is not str instance' % i

		
fuga is not str instance
bar is not str instance
hoge is not str instance
>>> for i in d.keys():
	if not hasattr(d[i], '__str__'):
		print '%s can\'t output str' % i

		
hoge can't output str

isinstanceもhasattrもはじぱいに載ってた気がするんだけどな…

PEP読んでないのバレバレ.