Cours de base Python (13 cours)

Orienté objet et [Programmation orientée objet](http://e-words.jp/w/E382AAE38396E382B8E382A385AFE838890E8738890E8738890E8738890E8738890E87 C'est un concept essentiel. Toutes les données des programmes Python sont représentées sous forme d'objets ou de relations entre objets. Toutes les chaînes et listes décrites jusqu'à présent sont des objets.

Cependant, cette page ne fournit pas une explication «claire» et «précise» de l'orientation de l'objet. Par conséquent, même dans l'explication des chaînes et des listes, je n'ai pas osé expliquer la partie sur les objets (et les méthodes). Le reste de cet article explique comment utiliser les classes et les objets en Python, en supposant que vous compreniez l'orientation des objets.

classe

Le programme qui utilise réellement la classe et l'objet est écrit ci-dessous. Veuillez l'exécuter et vérifier l'opération.

class_explain.py


class Spam:
	val = 100
	def ham(self):
		self.egg('call method')

	def egg(self,msg):
		print("{0}".format(msg))
		print(("{0}".format(self.val)))

spam = Spam()
spam.ham()

Le résultat est le suivant.

call method 100

En Python, les classes sont créées avec ** class ** * nom de classe ***: **. Les noms de classe commencent par des lettres majuscules. Les variables de classe et les fonctions intraclasses (= méthodes) sont définies à l'aide de l'inscription. Les objets sont créés avec * object * ** = ** * class () *. La méthode est appelée avec * object.method () *. Si vous expliquez le programme ci-dessus en japonais

  1. Créez un objet spam de classe Spam
  2. L'objet spam appelle la méthode ham
  3. La méthode ham de l'objet spam appelle la méthode egg de l'objet spam (= lui-même)
  4. La méthode egg de l'objet spam renvoie l'argument msg
  5. La méthode egg génère la variable val de l'objet spam

Le point est le premier argument ** self ** de la méthode. Pour ceux qui sont entrés en Python à partir d'autres langues Vous pourriez vous demander, "Qu'est-ce que c'est que ce soi quand spam.ham () n'a pas d'arguments?" En Python, les méthodes ont au moins un argument. Il est d'usage de toujours nommer ce premier argument self. En utilisant self, vous pouvez obtenir les variables de l'objet lui-même et appeler la méthode. C'est "ceci" en Java.

constructeur

Une fonction spéciale appelée lors de la création d'un objet s'appelle un constructeur. L'initialisation des données manipulées par l'objet est effectuée ici. Le constructeur est défini avec le nom «__init __ ()». Il y a deux " _ "avant et après. Faites attention.

constructor_explain.py


class Spam:
    def __init__(self,ham,egg):
        self.ham = ham
        self.egg = egg
    def output(self):
        sum = self.ham + self.egg
        print("{0}".format(sum))

spam = Spam(5,10)
spam.output()

Le résultat est le suivant.

15

Destructeur

À l'opposé du constructeur, cette fonction est automatiquement exécutée lorsque l'objet n'est plus nécessaire et que Python le supprime. Définissez-le avec une méthode nommée __del__. Mais dans la plupart des cas, aucun destructeur n'est défini. Comme raison

Nous utilisons avec pour libérer des ressources, mais nous ne l'expliquerons pas ici car cela dépasse le niveau.

Héritage

"Héritage" définit une classe comme une classe avec des données et des méthodes d'une autre classe. L'héritage est une idée importante commune non seulement à Python, mais également aux langages de programmation orientés objet. Exécutez le programme suivant.

extend_explain.py


class Base:
    basevalue = "base"
    def spam(self):
        print("Base.spam()")

    def ham(self):
        print("ham")

class Derived(Base):
    def spam(self):
        print ("Derived.spam()")
        self.ham()

derived = Derived()
print("{0}".format(derived.basevalue))
derived.ham()

** class ** * Nom de classe (nom de classe de base) * **: ** vous permet de définir une classe (classe dérivée) qui hérite des variables et méthodes de la classe de base. La classe dérivée hérite des variables et des méthodes de la classe de base, donc la sortie ressemble à ceci:

base ham

Héritage multiple

Python permet à «l'héritage multiple» d'hériter de plusieurs classes de base. ** class ** * Nom de classe (nom de classe de base 1, nom de classe de base 2, ...) *

multi_extend.py


class A:
	def method(self):
		print("class A")

class B:
	def method(self):
		print("class B")

class C(A):
	def method(self):
		print("class C")

class D(B,C):
	pass

d = D()
d.method()

Le résultat de sortie sera ** classe B **. Bien que rarement utilisé, vous pouvez créer une classe qui ne fait rien en écrivant pass dans la classe. Lorsque vous appelez la méthode method () de l'objet d de la classe D, vous pouvez utiliser les classes de base B et C de la classe D. La méthode de classe B method () décrite précédemment est appelée et la ** classe B ** est sortie. Si la classe B du programme ci-dessus est décrite uniquement pour passer comme dans la classe D, la méthode method () n'existe pas dans la classe de base B. La méthode de classe C method () est appelée et la sortie est ** classe C **. Si seul pass est décrit pour la classe C, la méthode method () de la classe A, qui est la classe de base de la classe C, sera appelée. ** la classe A ** est sortie. Si vous n'écrivez la classe A que pour pass, une exception se produira car method () n'existe dans aucune des classes.

La création d'un héritage multiple complexe peut entraîner une erreur car l'ordre de recherche des méthodes ne peut pas être déterminé. Faites attention.

privé et public

Encapsulation est un élément important de la programmation orientée objet. En Python, vous pouvez rendre une variable ou une méthode privée en ajoutant «\ _ \ _» (deux _). Exécutez le programme suivant.

private_explain.py


class Spam:
    __attr = 100
    def __init__(self):
        self.__attr = 999
    def method(self):
        self.__method()
    def __method(self):
        print(self.__attr)

spam =Spam()
spam.method()   #OK
spam.__method() #NG
spam.__attr     #NG

La ligne spam.method () fonctionne correctement, mais la ligne spam. \ _ \ _ Method () donne une erreur. La méthode méthode de la classe Spam est publique car elle ne commence pas par "\ _ \ _". Il peut être appelé directement depuis l'objet. J'appelle \ _ \ _method () avec "\ _ \ _" au début de la méthode méthode, Puisqu'il s'agit d'une référence de l'intérieur, aucune erreur ne se produira. Mais si l'objet spam tente d'appeler directement \ _ \ _method () \ _ \ _ La méthode () avec "\ _ \ _" au début ne peut pas être appelée car elle est privée, ce qui entraîne une erreur. Ceci s'applique également au spam. \ _ \ _ Attr.

Suivant: Cours de base Python (14 modules et packages)

Recommended Posts

Cours de base Python (13 cours)
Cours de base Python (7 dictionnaire)
Cours de base Python (9 itérations)
Cours de base Python (11 exceptions)
Cours de base Python (6 sets)
Cours de base Python (Introduction)
Cours de base Python (8 branches)
Cours de base Python (3 Exécution de Python)
Cours de base Python (5 List Taple)
Cours de base Python (1 Qu'est-ce que Python)
Cours de base Python (14 modules et packages)
RF Python Basic_01
Écriture de base Python
Grammaire de base Python3
RF Python Basic_02
Cours de base Python (à la fin de 15)
Cours de base Python (4 types numériques / type chaîne de caractères)
Édition de base Python Memo
Tri de base en Python
[python] méthode de base de la classe
Aide-mémoire Python3 (basique)
Grammaire de base Python (divers)
Mémorandum de base Python partie 2
Mémo de base Python - Partie 2
Notes de commande de base Python
Connaissance de base de Python
Mémo de grammaire de base Python
Mémo de base Python - Partie 1
mémorandum python super basique
Instruction if de base Python
Python Basic --Pandas, Numpy-
Application Python: Pandas Partie 1: Basique
À propos des objets et des classes Python
Authentification BASIC avec bouteille Python
Ordre de tri des dict de base Python
[Python] Utilisation d'OpenCV avec Python (basique)
Installation de Python et grammaire de base
Mémo de grammaire de base Python (1)
Classe Python pour apprendre avec la chimioinfomatique
Paiza Python Primer 8: Comprendre les classes
Grammaire de base Python (divers) Mémo (2)
Grammaire de base Python pour les débutants
[Python] [SQLite3] Exploiter SQLite avec Python (basique)
Utilisation basique de la f-string Python
J'ai appris la grammaire de base de Python
Grammaire de base Python (divers) Mémo (4)
Installation de Python (Python 3.7.7) et grammaire de base
Comparaison de la grammaire de base entre Java et Python
Ce code Python n'a pas de classes ...
ABC pour les classes abstraites Python et la saisie de canard
Python
Scraping avec Selenium en Python (Basic)
Python: une note sur les classes 1 "Résumé"
Cours Python pour la science des données - techniques utiles
Ce qui était surprenant dans les classes Python
[Python] À propos des classes Executor et Future
J'ai suivi le cours d'apprentissage Python I de Progete