[Python-de] auf Liste testen

Diez B. Roggisch deets at web.de
Don Dez 15 16:21:30 CET 2005


>
> Was mir auch grad noch einfällt: da es in Python kein Problem ist, zur
> Laufzeit einer Klasse Methoden zu klauen (und damit auch allen bereits
> instanzierten Objekten!), kann man mit isinstance() sowieso mächtig auf
> die Nase fallen:
>
> <<< class C(object):
> ...     def f(self): pass
> ...
> <<< c = C()
> <<< del C.f
> <<< isinstance(c, C)
> True
> <<< c.f()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> AttributeError: 'C' object has no attribute 'f'

Naja, das ist ja auch etwas sehr boesartig. 

> Gut, das geht mit den built-in Types nicht, aber deswegen ist
> isinstance() trotzdem kein besserer Stil.

Auch wenn ich oft type() verwende, hat Andreas da durchaus recht - isinstance 
wird in der python-Doku zu type() als bessere Alternative empfohlen. Und 
klappt zb auch hier:

 >>> class Foo(list):
...    pass
...
>>> l = Foo()
>>> type(l) == list
False
>>> isinstance(l, list)
True
>>>                       


MfG Diez