Typinformation abfragen

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
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Wie kann ich in Python eine Typinformation einholen? Wie kann ich in Abhängigkeit von dieser Typinformation bspw. einer Matrix abfragen?

bspw.

if type(m)==matrix:
do something
BlackJack

@Brando: Typtests macht man in der Regel nicht. Falls man das doch macht (obwohl man das ja eigentlich nicht macht) gibt es `isinstance()`. Wofür brauchst Du das denn?
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Ich übergebe entweder eine Matrix oder einen Wahrheitswert. Je nach Typ der Übergabe wird eine andere Unterroutine ausgeführt.
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

@Brando: Ich benutze die folgende Abfrage

Code: Alles auswählen

if type(1) == int:
    print('Integer type')
eckhard
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Gibt es auch:

if type(m)== matrix:
print(m)


?
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der Typ ist einfach die jeweilige Klasse. Falls es noch um dein Vorhaben mit Sympy geht, dann also:

Code: Alles auswählen

if isinstance(m, sympy.Matrix):
    # ...
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

eckhard hat geschrieben:@Brando: Ich benutze die folgende Abfrage

Code: Alles auswählen

if type(1) == int:
    print('Integer type')
Das liefert den exakten Typ. Beim Programmieren mit Python will man aber auch abgeleitete Typen zulassen. Für die würde dein Code nicht erwartungsgemäß funktionieren. Zumal es eigentlich auch ``type(x) is int`` heißen müsste, da hier tatsächlich die Klasse zurückgeliefert wird und eine bestimmte Klasse nur genau einmal existieren kann. ``a == b`` fällt aber quasi auf ``a is b`` zurück, wenn nichts anderes definiert wurde. Daher funktioniert das.

Auch wenn es häufig darauf hinausläuft, dass man tatsächlich nur Objekte vom angegebenen Typen benutzt, so hat sich dennoch die Nutzung von `isinstance()` eingebürgert. Die Nutzung habe ich ja in meinem vorherigen Beitrag gezeigt.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: wenn Du je nach Typ etwas anderes in einer Funktion machen willst, ist das ein DEUTLICHES Zeichen dafür, dass Du eigentlich zwei eigenständige Funktionen haben willst, die ohne Typprüfung auskommen,
Brando
User
Beiträge: 171
Registriert: Donnerstag 28. Januar 2016, 15:36

Bei mir wird der Name sympy in sympy.Matrix nicht erkannt. Muss man noch eine Bibliothek oder etwas anderes einbinden, damit das erkannt wird?
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Brando: Du solltest den Namen sympy importieren.
Antworten