[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