Créer un objet a partir d'une classe est tout aussi simple.
>>> class myClass: def printHello(self): print('Hello world') >>> myObj = myClass() >>> myObj.printHello() Hello world
Par contre, lorsque l'on dispose d'une référence sur un objet, l'utilisation de la fonction type(monObjet) indique que l'objet est une instance d'une classe... mais n'indique pas laquelle!
La fonction dir(monObjet) énumère les attribus de l'élément passé en paramètre. Encore une fois, cela n'indique pas quelle est la classe.
La fonction help(monObjet) fournit la liste des méthodes et bien entendu la classe mais son utilisation est principalement cantonné au mode interactif.
Pour extraire le nom de la classe (et d'autres informations) avec du code, l'on utilise alors les class-types.
Ainsi, l'utilisation de monObjet.__class__.__name__ fournira le résultat attendu.
>>> class Car: def WhoAmI( self ): print( 'my information are %s ' % (dir(self)) ) print( 'my Type is %s ' % (type(self)) ) print( 'my Class is %s ' % (self.__class__) ) print( 'my Module is %s ' % (self.__class__.__module__) ) print( 'my ClassName is %s ' % (self.__class__.__name__ ) ) >>> myCar = Car() >>> myCar.WhoAmI() my information are ['WhoAmI', '__doc__', '__module__'] my Type is <type instance> my Class is __main__.Car my Module is __main__ my ClassName is Car
Juste pour le plaisir de l'excercice académique, Python permet de recrée très facilement une autre instance d'une classe à partir d'une référence vers objet de cette dite classe.
>>> class Car: carInfo = 'This is a car' def printCarInfo( self ): print( 'carInfo = %s' % (self.carInfo)) def WhoAmI( self ): print( 'my information are %s ' % (dir(self)) ) print( 'my Type is %s ' % (type(self)) ) print( 'my Class is %s ' % (self.__class__) ) print( 'my Module is %s ' % (self.__class__.__module__) ) print( 'my ClassName is %s ' % (self.__class__.__name__ ) ) >>> myCar = Car() >>> # Utiliser une reference d objet pour recréer un autre objet de la même classe >>> # ... juste pour le plaisir de le faire >>> myCar2 = myCar.__class__() >>> myCar2.carInfo = 'Anohter instance of Car object' >>> myCar2.printCarInfo() carInfo = Anohter instance of Car object >>> myCar.printCarInfo() carInfo = This is a car >>> myCar2.WhoAmI() my information are ['WhoAmI', '__doc__', '__module__', 'carInfo', 'printCarInfo'] my Type is <type instance> my Class is __main__.Car my Module is __main__ my ClassName is Car
Voici quelques lignes de codes permettant de jouer un peu avec l'héritage en Python.
Pour rappel, Pyhton supporte l'héritage multiple (même si son utilisation n'est pas recommandée).
>>> class TurboCar(Car): carInfo = 'This is a *** TURBO *** car' def WhoAmI( self ): Car.WhoAmI(self) # call ancestor print( 'my bases classes are %s' % (self.__class__.__bases__) ) >>> myTurbo = TurboCar() >>> myTurbo.printCarInfo() carInfo = This is a *** TURBO *** car >>> myTurbo.WhoAmI() my information are ['WhoAmI', '__doc__', '__module__', 'carInfo', 'printCarInfo'] my Type is <type instance> my Class is __main__.TurboCar my Module is __main__ my ClassName is TurboCar my bases classes are __main__.Car
Source: Class-type article on (An Unofficial) Python Reference Wiki
Aucun commentaire:
Enregistrer un commentaire