Klasseninstanz prüfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Hallo rayo,

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

gruss george
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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"
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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Hehe, ich war schneller :-P
Antworten