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.
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
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.
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
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.
"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
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.
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