On Mon, 01 Sep 2008 10:52:10 +0200, Manuel Ebert wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Hi Luca,
> 
> use type(something).__name__ , e.g.
> 
>  >>> def x():
>  >>>          pass
>  >>> class C:
>  >>>          pass
>  >>> c = C()
>  >>> type(x).__name__ == 'function'
> True
>  >> type(C).__name__ == 'classobj'
> True
>  >> type(c).__name__ == 'instance'
> True


That's relatively fragile, since such names aren't reserved in any way. 
It's easy to fool a name comparison check with an accidental name 
collision:

>>> class function(object):  # not a reserved name
...     pass
...
>>> x = function()
>>> type(x).__name__
'function'
>>> x()  # must be a function then...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'function' object is not callable


But not so easy to fool a type check:

>>> type(x) == new.function
False

Of course that's not bullet-proof either. I leave it as an exercise to 
discover how you might break that piece of code.



-- 
Steven
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to