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

Klasseninstanz prüfen

Beitragvon george » Dienstag 21. Februar 2006, 13:29

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:

Beitragvon rayo » Dienstag 21. Februar 2006, 14:19

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

Beitragvon george » Dienstag 21. Februar 2006, 14:32

Hallo rayo,

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

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

Beitragvon Joghurt » Dienstag 21. Februar 2006, 22:31

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

Beitragvon BlackJack » Dienstag 21. Februar 2006, 22:32

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

Beitragvon Joghurt » Dienstag 21. Februar 2006, 23:10

Hehe, ich war schneller :-P

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder