Emanuele Rocca wrote: > Hello list, > I've got a question partially related to this thread. > > * Gregor Lingl <[EMAIL PROTECTED]>, [2006-05-03 0:24 +0200]: >> v=<some numeric value> >> if isinstance(v, int) or isinstance(v, float): >> <block> > > I wonder which is the recommended way to check the type of a value.
Often the recommendation is just to assume that a value is the correct type and be ready to catch an exception if it is not. This allows 'duck typing' to work - your function (or whatever) will accept any value that implements the correct methods, whether it has a particular inheritance relationship with the expected type or not. For example you could make a function that accepted any mapping object whether it inherits from dict or not. > > In other words, what should I choose between: > isinstance(v, int) This is good because it will accept subclasses of int as well as plain ints. (Not that subclasses of int are that common, but other classes might be subclassed.) > type(v) is int > v.__class__ is int I think these are equivalent, though I would prefer the first. They are the most restrictive choice because they require an exact class match. Kent > > There's simply more than one way to do it or some of them are > discouraged? > > I've been told on #python that .__class__ is probably the worst one, but > without precise motivation, just as a personal opinion. > > ciao, > ema > > > ------------------------------------------------------------------------ > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor