Python-Grundkurs (13 Klassen)

Objektorientiert und [Objektorientierte Programmierung](http://e-words.jp/w/E382AAE38396E382B8E382388388388 Es ist ein wesentliches Konzept. Alle Daten in Python-Programmen werden als Objekte oder Beziehungen zwischen Objekten dargestellt. Alle bisher beschriebenen Zeichenfolgen und Listen sind Objekte.

Diese Seite bietet jedoch keine "einfache" und "genaue" Erklärung der Objektorientierung. Daher habe ich es selbst bei der Erklärung von Zeichenfolgen und Listen nicht gewagt, den Teil über Objekte (und Methoden) zu erklären. Der Rest dieses Artikels erklärt, wie Klassen und Objekte in Python verwendet werden, vorausgesetzt, Sie verstehen die Objektorientierung.

Klasse

Das Programm, das die Klasse und das Objekt tatsächlich verwendet, ist unten beschrieben. Bitte führen Sie es aus und überprüfen Sie den Vorgang.

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()

Das Ergebnis ist wie folgt.

call method 100

In Python werden Klassen mit ** class ** * class name ***: ** erstellt. Klassennamen beginnen mit Großbuchstaben. Klassenvariablen und Intraclass-Funktionen (= Methoden) werden mit Inschrift definiert. Objekte werden mit * object * ** = ** * class () * erstellt. Die Methode wird mit * object.method () * aufgerufen. Wenn Sie das obige Programm auf Japanisch erklären

  1. Erstellen Sie einen Objekt-Spam der Klasse Spam
  2. Das Spam-Objekt ruft die ham-Methode auf
  3. Die Ham-Methode des Spam-Objekts ruft die Eimethode des Spam-Objekts (= selbst) auf.
  4. Die Eimethode des Spam-Objekts gibt das Argument msg aus
  5. Die Eimethode gibt die Variable val des Spam-Objekts aus

Der Punkt ist das erste Argument ** self ** der Methode. Für diejenigen, die Python aus anderen Sprachen eingegeben haben Sie fragen sich vielleicht: "Was ist das für ein Selbst, wenn spam.ham () keine Argumente hat?" In Python haben Methoden mindestens ein Argument. Es ist üblich, dieses erste Argument immer selbst zu benennen. Mit self können Sie die Variablen des Objekts selbst abrufen und die Methode aufrufen. Es ist "dies" in Java.

Konstrukteur

Eine spezielle Funktion, die beim Erstellen eines Objekts aufgerufen wird, wird als Konstruktor bezeichnet. Hier erfolgt die Initialisierung der vom Objekt verarbeiteten Daten. Der Konstruktor wird mit dem Namen __init __ () definiert. Es gibt zwei " _ "vorher und nachher. Achtung.

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()

Das Ergebnis ist wie folgt.

15

Zerstörer

Im Gegensatz zum Konstruktor wird diese Funktion automatisch ausgeführt, wenn das Objekt nicht mehr benötigt wird und Python es löscht. Definieren Sie es mit einer Methode namens __del__. In den meisten Fällen ist jedoch kein Destruktor definiert. Als Grund

Wir verwenden mit, um Ressourcen freizugeben, aber wir werden es hier nicht erklären, weil es über das Niveau hinausgeht.

Erbe

"Vererbung" definiert eine Klasse als eine Klasse mit Daten und Methoden einer anderen Klasse. Vererbung ist eine wichtige Idee, die nicht nur Python, sondern auch objektorientierten Programmiersprachen gemeinsam ist. Führen Sie das folgende Programm aus.

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()

** Klasse ** * Klassenname (Basisklassenname) * **: ** ermöglicht es Ihnen, eine Klasse (abgeleitete Klasse) zu definieren, die die Variablen und Methoden der Basisklasse erbt. Die abgeleitete Klasse erbt die Variablen und Methoden der Basisklasse, sodass die Ausgabe folgendermaßen aussieht:

base ham

Mehrfachvererbung

Python erlaubt "Mehrfachvererbung", mehrere Basisklassen zu erben. ** Klasse ** * Klassenname (Basisklassenname 1, Basisklassenname 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()

Das Ausgabeergebnis ist ** Klasse B **. Obwohl selten verwendet, können Sie eine Klasse erstellen, die nichts tut, indem Sie einen Pass in die Klasse schreiben. Wenn Sie die Methode method () des Objekts d der Klasse D aufrufen, können Sie die Basisklassen B und C der Klasse D verwenden Die zuvor beschriebene Methode der Klasse B () wird aufgerufen und ** Klasse B ** ausgegeben. Wenn Klasse B des obigen Programms nur für das Bestehen wie in Klasse D beschrieben wird, existiert die Methode method () in Basisklasse B nicht. Die Methode der Klasse C method () wird aufgerufen und die Ausgabe ist ** Klasse C **. Wenn nur pass für Klasse C beschrieben wird, wird die Methode method () der Klasse A, die die Basisklasse der Klasse C ist, aufgerufen. ** Klasse A ** wird ausgegeben. Wenn Sie Klasse A nur zum Bestehen schreiben, tritt eine Ausnahme auf, da method () in keiner der Klassen vorhanden ist.

Das Erstellen einer komplexen Mehrfachvererbung kann zu einem Fehler führen, da die Suchreihenfolge der Methode nicht bestimmt werden kann. Achtung.

privat und öffentlich

Encapsulation ist ein wichtiges Element in der objektorientierten Programmierung. In Python können Sie eine Variable oder Methode privat machen, indem Sie "\ _ \ _" (zwei _) voranstellen. Führen Sie das folgende Programm aus.

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

Die Zeile spam.method () läuft einwandfrei, aber die Zeile spam. \ _ \ _ Method () gibt einen Fehler aus. Die Methodenmethode der Klasse Spam ist öffentlich, da sie nicht mit "\ _ \ _" beginnt. Es kann direkt vom Objekt aus aufgerufen werden. Ich rufe \ _ \ _method () mit "\ _ \ _" am Anfang der Methodenmethode auf. Da es sich um eine Referenz von innen handelt, tritt kein Fehler auf. Wenn das Spam-Objekt jedoch versucht, \ _ \ _method () direkt aufzurufen \ _ \ _ Method () mit "\ _ \ _" am Anfang kann nicht aufgerufen werden, da es privat ist, was zu einem Fehler führt. Dies gilt auch für Spam. \ _ \ _ Attr.

Weiter: Python-Grundkurs (14 Module und Pakete)

Recommended Posts

Python-Grundkurs (13 Klassen)
Python-Grundkurs (7 Wörterbuch)
Python-Grundkurs (9 Iterationen)
Python-Grundkurs (11 Ausnahmen)
Python-Grundkurs (6 Sätze)
Python-Grundkurs (Einführung)
Python-Grundkurs (8 Zweige)
Python-Grundkurs (3 Ausführung von Python)
Python-Grundkurs (5 List Taple)
Python-Grundkurs (1 Was ist Python?)
Python-Grundkurs (14 Module und Pakete)
RF Python Basic_01
Python-Grundschrift
Grundlegende Grammatik von Python3
RF Python Basic_02
Python-Grundkurs (Ende 15)
Python-Grundkurs (4 numerische Typen / Zeichenfolgen)
Python Memo Basic Edition
Grundlegende Sortierung in Python
Grundmethode der [Python] -Klasse
Python3 Spickzettel (Basic)
Python-Grundgrammatik (Sonstiges)
Python Basic Memorandum Teil 2
Python-Grundnotiz - Teil 2
Grundlegende Python-Befehlsnotizen
Grundkenntnisse in Python
Python grundlegende Grammatik Memo
Python-Grundnotiz - Teil 1
Python Memorandum Super Basic
Python grundlegende if-Anweisung
Python Basic - Pandas, Numpy -
Python-Anwendung: Pandas Teil 1: Basic
Informationen zu Python-Objekten und -Klassen
BASIC-Authentifizierung mit Python-Flasche
Python Basic Dikt Sortierreihenfolge
[Python] Verwenden von OpenCV mit Python (Basic)
Python-Installation und grundlegende Grammatik
Python-Grammatik-Grundnotiz (1)
Python-Kurs zum Lernen mit Chemoinfomatik
Paiza Python Primer 8: Grundlegendes zu Klassen
Python-Grundgrammatik (Verschiedenes) Memo (2)
Grundlegende Python-Grammatik für Anfänger
[Python] [SQLite3] Betreiben Sie SQLite mit Python (Basic)
Grundlegende Verwendung von Python-F-String
Ich habe die grundlegende Python-Grammatik gelernt
Python-Grundgrammatik (Verschiedenes) Memo (4)
Python (Python 3.7.7) Installation und grundlegende Grammatik
Vergleich der grundlegenden Grammatik zwischen Java und Python
Dieser Python-Code hat keine Klassen ...
ABC für Python-Abstract-Klassen und Ententypisierung
Python
Scraping mit Selen in Python (Basic)
Python: Ein Hinweis zu Klasse 1 "Abstract"
Python-Kurs für datenwissenschaftlich-nützliche Techniken
Was war überraschend an Python-Klassen?
[Python] Über Executor und zukünftige Klassen
Ich habe Progetes Python-Lernkurs I besucht