Python >> Tutoriel Python >  >> Python

Quelle est la méthode standard pour vérifier le type en Python ?

Problème :Quel est le meilleur moyen de vérifier si un objet donné est d'un type donné ? Par exemple, si vous avez une variable object , comment vérifier si c'est un string ?

Vérifier avec les sous-classes

Solution :Pour vérifier si un object est une instance de str ou l'une de ses sous-classes, utilisez isinstance :

if isinstance(o, str):
    print(o, 'is of type string')

Notez que si l'objet hérite de string, le résultat de isinstance(o, str) sera également True .

Voici un exemple :

class Car:
    def speed(self):
        return 100


class Sportscar(Car):
    def speed(self):
        return 200


vw = Car()
porsche = Sportscar()

print(isinstance(vw, Car))
# True

print(isinstance(porsche, Sportscar))
# True

print(isinstance(porsche, Car))
# True --> Inherit being a Car from being a Sportscar

L'exemple montre que le vw est un Car et le porsche est un Sportscar . Cependant, en tant que Sportscar hérite de Car , le porsche est aussi un Car .

Cependant, vous pourriez dire que la vérification du type ne devrait pas inclure la vérification des sous-classes. Ainsi, dans cet exemple, le porsche l'instance ne doit pas être un Car . Voyons comment accomplir cela ensuite !

Vérifier sans sous-classes

Solution 2 :Pour vérifier si un object est une instance de str , à l'exception des sous-classes, utilisez la fonction intégrée de Python type(object) et vérifiez si c'est le même que str en utilisant le mot clé is .

obj = 'hello'

if type(obj) is str:
    print(obj, 'is of type string (it is not a subclass)')

La sortie est :

hello is of type string (it is not a subclass)

De même, si vous utilisez le même exemple de classe qu'avant, le porsche ne serait plus un Car — même s'il s'agit d'un Sportscar !

class Car:
    def speed(self):
        return 100


class Sportscar(Car):
    def speed(self):
        return 200


vw = Car()
porsche = Sportscar()

print(type(vw) is Car)
# True

print(type(porsche) is Sportscar)
# True

print(type(porsche) is Car)
# False --> Inherit being a Car from being a Sportscar but is not of type Car

Ressources  :Vous pouvez également consulter les ressources suivantes sur le typage Python :

  • https://blog.finxter.com/python-built-in-functions/
  • https://stackoverflow.com/questions/152580/whats-the-canonical-way-to-check-for-type-in-python
  • https://blog.finxter.com/a-simple-example-for-python-objects-and-classes-video/