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/