Seite 1 von 1

Klasseninstanz prüfen

Verfasst: Dienstag 21. Februar 2006, 13:29
von george
Hallo,

ich habe eine Funktion geschrieben, die als Übergabeparameter eine Klasseninstanz erwartet.

Code: Alles auswählen

def setFormat(self, objFormat):
     #stuff
Wie kann ich in meiner Funktion überprüfen, ob die Klasseninstanz von der Klasse Format erzeugt worden ist???
Also ungefähr so:

Code: Alles auswählen

def setFormat(self, objFormat):
     #ist objFormat nicht von Klasse "Format"
     raise ValueError, 'Falsche Klasse'
     #stuff
Danke

Gruss george

Verfasst: Dienstag 21. Februar 2006, 14:19
von rayo
Hi

Du suchst dass hier:

Code: Alles auswählen

class a:
    pass
class b(a):
    pass

x = a()
y = b()
print isinstance(x,a)
print isinstance(y,a)
Gruss

Verfasst: Dienstag 21. Februar 2006, 14:32
von george
Hallo rayo,

ich danke dir.
Genau das habe ich gesucht. Funzt sauber

gruss george

Verfasst: Dienstag 21. Februar 2006, 22:31
von Joghurt
In der Regel solltest du so etwas nicht machen.

Der Grund ist einfach der, dass wenn sich das übergebene Argument so verhält wie das erwartete, kann es dir Wurscht sein. Wenn es es nicht tut, wird eh eine Exception ausgelöst.

Beispiel: isinstance(arg,int) ist nicht gut, da du dann keine Floats übergeben kannst, obwohl sie sich (fast) genau Verhalten

Es gibt natürlich Gründe, so etwas zu tun, aber im Allgemeinen solltest du dich an die Pythonphilosophie halten: "anstatt zu versuchen, Fehler auszuschließen, ist es besser, auf einen evtl. Fehler zu reagieren"

Verfasst: Dienstag 21. Februar 2006, 22:32
von BlackJack
Wobei Du dann keine Objekte mehr übergeben kannst, die zwar alle Bedingungen erfüllen, das heisst die erforderlichen Attribute und das gewünschte Verhalten besitzen, aber keine Exemplare der Klasse sind auf die Du prüfst.

Ob man eine Funktion oder Methode so einschränken möchte, sollte man sich gut überlegen.

Verfasst: Dienstag 21. Februar 2006, 23:10
von Joghurt
Hehe, ich war schneller :-P