Ποιος είναι ο καλύτερος τρόπος για να ελέγξετε αν ένα δεδομένο αντικείμενο ανήκει σε έναν δεδομένο τύπο; Τι θα λέγατε να ελέγξετε αν το αντικείμενο κληρονομεί από έναν δεδομένο τύπο;
Ας υποθέσουμε ότι έχω ένα αντικείμενο "ο". Πώς μπορώ να ελέγξω αν είναι str
;
Για να ελέγξετε αν η o
είναι μια περίπτωση της str
ή κάποιας υποκλάσης της str
, χρησιμοποιήστε την isinstance (αυτός θα ήταν ο "κανονικός" τρόπος):
if isinstance(o, str):
Για να ελέγξετε αν ο τύπος του o
είναι ακριβώς str
(αποκλείοντας τις υποκλάσεις):
if type(o) is str:
Το παρακάτω λειτουργεί επίσης, και μπορεί να είναι χρήσιμο σε ορισμένες περιπτώσεις:
if issubclass(type(o), str):
Ανατρέξτε στην ενότητα Built-in Functions στην Αναφορά βιβλιοθήκης Python για σχετικές πληροφορίες.
Μια ακόμη σημείωση: σε αυτή την περίπτωση, αν χρησιμοποιείτε python 2, ίσως να θέλετε να χρησιμοποιήσετε:
if isinstance(o, basestring):
επειδή αυτό θα πιάσει επίσης συμβολοσειρές Unicode (unicode
δεν είναι υποκλάση της str
- τόσο η str
όσο και η unicode
είναι υποκλάσεις της basestring
). Σημειώστε ότι η basesring
δεν υπάρχει πλέον στην python 3, όπου υπάρχει αυστηρός διαχωρισμός των συμβολοσειρών (str
) και των δυαδικών δεδομένων (bytes
).
Εναλλακτικά, η isinstance
δέχεται μια πλειάδα κλάσεων. Αυτό θα επιστρέψει True αν το x είναι instance οποιασδήποτε υποκλάσης οποιουδήποτε από τα (str, unicode):
if isinstance(o, (str, unicode)):
Η isinstance(o, str)
θα επιστρέψει την τιμή True
αν το o
είναι ένα str
ή είναι ενός τύπου που κληρονομεί από το str
.
Το type(o) is str
θα επιστρέψει True
αν και μόνο αν το o
είναι str. Θα επιστρέψει False
αν το o
είναι τύπου που κληρονομεί από το str
.
isinstance(o, str)