追記 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読んでないのバレバレ.