mit isinstance Typ eines Objekts 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
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Hallo,

mal angenommen, ich habe in der Variable obj eine Referenz auf ein beliebiges Objekt, und habe keine Ahnung, wo das Objekt herkommt. Kann ich dann mit isinstance prüfen, um was für ein Objekt es sich handelt? Konkret geht es darum, dass ich eine Liste mit verschiedenen Objekten habe, alle aus unterschiedlichen Klassen, und daraus das Objekt der Klasse "RBIRadioSource" haben möchte. Ich weiß aber nicht, wo die RBIRadioSource Klasse definiert habe. Versucht habe ich das hier:

Code: Alles auswählen

if isinstance(obj, RBIRadioSource):
Ich bekomme aber den Fehler: NameError: global name 'RBIRadioSource' is not defined

Ist ja auch logisch, weil ich keine Ahnung habe, wo die Klasse RBIRadioSource definiert ist. Kann ich trotzdem irgendwie den Typ prüfen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, du kannst mit `isinstance` ueberpruefen, ob ein Objekt ein Exemplar einer _bekannten_ Klasse ist.

Aber vielleicht hilft dir `type` beim herausfinden weiter?
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

type(props) gibt mir im entsprechenden Fall <class '__main__.RBIRadioSource'>

andere Werte sind z.B. <__main__.RBLibrarySource object at 0x3afc820 (RBLibrarySource at 0x24e9020)>

Irgendwie muss ich die doch voneinander unterscheiden können?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Die Klasse ist in __main__ also müsste isinstance doch funktionieren
the more they change the more they stay the same
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

>>> print radio_source
<__main__.RBIRadioSource object at 0x3afc190 (RBIRadioSource at 0x2cc4000)>
>>> __main__.RBIRadioSource
Traceback (most recent call last):
File "/usr/lib/rhythmbox/plugins/python-console/pythonconsole.py", line 389, in __run
r = eval(command, self.namespace, self.namespace)
File "<string>", line 1, in <module>
NameError: name '__main__' is not defined
>>> __main__
Traceback (most recent call last):
File "/usr/lib/rhythmbox/plugins/python-console/pythonconsole.py", line 389, in __run
r = eval(command, self.namespace, self.namespace)
File "<string>", line 1, in <module>
NameError: name '__main__' is not defined
>>>
>>> print __main__
Traceback (most recent call last):
File "/usr/lib/rhythmbox/plugins/python-console/pythonconsole.py", line 393, in __run
exec command in self.namespace
File "<string>", line 1, in <module>
NameError: name '__main__' is not defined
Was bedeutet __main__ denn genau? Und wie kann ich darauf zugreifen? Da die Objekte ja dann eigentlich alle "Children" von __main__ sind, könnte ich vllt. von irgendeinem Objekt auf den Parent zugreifen und davon das Child RBIRadioSource?[/quote]
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wäre vielleicht nicht schlecht gewesen, zu erwähnen, dass du keine normale Python-Shell verwendest, sondern die von Rhythmbox.
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Ich benutze ja auch die normale Python-Shell (wird übrigens ein Plugin für Rhythmbox). Nur zum Testen benutze ich gerade die Shell von Rhythmbox.
Antworten