In Anlehnung an die Python-Grundlagen von gestern Abend [Funktionen und anonyme Funktionen usw. (https://qiita.com/MuAuan/items/fe594b794fcf75ae3abe) werden wir über Funktionen und Klassen sprechen. 【Hinweis】 ["Data Scientist Training Course an der Universität von Tokio"](https://www.amazon.co.jp/%E6%9D%B1%E4%BA%AC%E5%A4%A7%E5%AD%A6%E3 % 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 82% B5% E3% 82% A4% E3% 82% A8% E3% 83% B3% E3% 83 % 86% E3% 82% A3% E3% 82% B9% E3% 83% 88% E8% 82% B2% E6% 88% 90% E8% AC% 9B% E5% BA% A7-Python% E3% 81 % A7% E6% 89% 8B% E3% 82% 92% E5% 8B% 95% E3% 81% 8B% E3% 81% 97% E3% 81% A6% E5% AD% A6% E3% 81% B6 % E3% 83% 87% E2% 80% 95% E3% 82% BF% E5% 88% 86% E6% 9E% 90-% E5% A1% 9A% E6% 9C% AC% E9% 82% A6% Ich werde E5% B0% 8A / dp / 4839965250 / ref = tmm_pap_swatch_0? _ Encoding = UTF8 & qid = & sr =) lesen und die Teile zusammenfassen, an denen ich einige Zweifel habe oder die ich nützlich finde. Daher denke ich, dass die Zusammenfassung unkompliziert sein wird, aber bitte lesen Sie sie, da der Inhalt nichts mit diesem Buch zu tun hat.
Dieses Kapitel konzentriert sich auf den Mechanismus von Python-Funktionsaufrufen und die Unterschiede zwischen Klassennotation und Funktionen. Informationen zum Funktionsaufruf finden Sie im Folgenden. 【Referenz】 Modulfunktionsaufruf @PyQ
Erstellen Sie eine Instanz aus der Klasse. Wir werden dieses Buch ein wenig verlassen, um die Ähnlichkeiten zwischen Funktionsaufrufen, Klassendeklarationen und Instanzausführung zu zeigen.
Funktionen werden manchmal in einem PG verwendet, aber wenn versucht wird, ein kompliziertes PG zu schreiben, werden die Funktionen gespeichert und in einer paketartigen Struktur mit einer strukturierten Verzeichnisstruktur verwendet. In diesem Fall hat Python einen wichtigen Mechanismus.
Das heißt, wenn Sie den folgenden Code mit > python calc_add.py
ausführen, funktioniert er in der folgenden Reihenfolge.
① Es werden zwei Funktionsdefinitionen vorgenommen
② Der Modulname calc_add
wird __name__
zugewiesen
③ Die Anweisung print
wird ausgeführt
④ Die if-Anweisung ist True, und die folgenden zwei print-Anweisungen werden ausgeführt.
calc_add.py
def calc_add(a, b):
return a + b
def calc_multi(a, b):
return a * b
print('__name__:', __name__)
if __name__ == '__main__':
print(calc_add(5,3))
print(calc_multi(5, 3))
Ergebnis
__name__: __main__
8
15
main.py
ausFühren Sie in diesem Fall > python main.py
aus
(1) Lesen Sie die beiden Funktionen calc_add und calc_multi
aus calc_add.py
mit der ersten Deklarationsanweisung. Zu diesem Zeitpunkt wird, wie Sie aus der Ausgabe sehen können, die obige calc_add.py
ausgeführt, die print
-Anweisung wird ausgeführt und __name__: calc_add
wird ausgegeben. Die if-Anweisung lautet False (__ name__ = calc_add) und wird daher nicht ausgeführt ② Als nächstes wird die print-Anweisung von main.py ausgeführt. ③ Da die
if-Anweisung von
main.py True ist, werden die folgenden zwei
print-Anweisungen ausgeführt. Mit diesem Mechanismus können Sie eine Funktion aufrufen und verwenden. ④ Daher muss die Notation
if name == '__ main __':` eingefügt werden. Es ist jedoch nicht unbedingt erforderlich, wenn Sie es aufrufen und verwenden.
main.py
from calc_add import calc_add, calc_multi
print('__name__2:', __name__)
if __name__ == '__main__':
print(calc_add(5,3))
print(calc_multi(5, 3))
Ergebnis
__name__: calc_add
__name__2: __main__
8
15
** Hinweis) print ('__ name__:', __name __)
ist zur Erläuterung des Mechanismus enthalten und wird normalerweise nicht benötigt **
class
Die Klasse sieht genauso aus wie die Funktion.
Deklarieren Sie jedoch die Klasse.
Wie Sie in der if-Anweisung sehen können, definiert die Klasse dann die Instanz und ruft dann die in der Klasse definierte Funktion auf und verwendet sie.
Dieser Mechanismus wird als objektorientiert bezeichnet.
Das heißt, es ist ein Mechanismus, der viele Instanzen aus Klassen generiert und ausführt.
Die Merkmale der Klassendefinition sind wie folgt.
① Klasse deklarieren
(2) Definieren Sie den Konstruktor def __init __ (self, x, y):
. Die Variable self ist obligatorisch und definiert (die Variable self ist etwas Besonderes, aber ich habe eine Weile gebraucht, um zu glauben, dass es nur eine der Variablen ist). Die Argumente x und y definieren, was zu einem bestimmten Zeitpunkt benötigt wird.
【Referenz】
Was ist Python selbst? Erläuterung der Verwendung und Vorsichtsmaßnahmen
Über sich selbst
・ Selbst wird beim Deklarieren der Instanz nicht als Argument beschrieben
・ Self ist eine Klassenvariable
・ Kann auch für die Klassenvererbung verwendet werden
-Wenn sowohl die Klassenvariable als auch die Instanzvariable Werte haben, erhält die Instanzvariable als Referenz Priorität.
③ Konstruktor def __init __ (self, x, y):
ist der Code, der zuerst funktioniert, wenn die Instanz der Klasse definiert wird.
④ Definieren Sie andere notwendige Funktionen.
⑤ Führen Sie die erforderliche Verarbeitung wie "instance.calc_add ()" aus
⑥ if __name__ == '__ main __':
wird aus demselben Grund wie die Funktion geschrieben, ist jedoch beim Aufrufen und Verwenden nicht unbedingt erforderlich, sodass viele Klassen diese if-Anweisung oder Ausführungsanweisung nicht haben.
** Hinweis) print ('__ name__:', __name __)
ist zur Erläuterung des Mechanismus enthalten und wird normalerweise nicht benötigt **
calc_class.py
class MyCalcClass:
def __init__(self,x,y):
self.x = x
self.y = y
def calc_add1(self, a, b):
return a + b
def calc_add2(self):
return self.x + self.y
def calc_multi(self, a, b):
return a * b
print('__name__:', __name__)
if __name__ == '__main__':
instance_1 = MyCalcClass(1,2)
instance_2 = MyCalcClass(5,10)
print(instance_1.calc_add1(5,3))
print(instance_1.calc_add2())
print(instance_1.calc_multi(5, 3))
instance_1.calc_print(5)
>python calc_class.py
Ergebnis
Es ist wie folgt, aber Sie können sehen, dass das Ergebnis in Abhängigkeit vom Anfangswert von Instanz1 berechnet wird.
Wenn der if-Anweisungsteil gelöscht wird, wird nur __name__: __main__
ausgegeben.
__name__: __main__
8
3
15
data:5:Wert von y 2
main.py
ausmain_class.py
from calc_class import MyCalcClass
print('__name__2:', __name__)
if __name__ == '__main__':
instance_1 = MyCalcClass(1,2)
instance_2 = MyCalcClass(5,10)
print(instance_1.calc_add1(5,3))
print(instance_1.calc_add2())
print(instance_1.calc_multi(5, 3))
instance_1.calc_print(5)
Ergebnis
>python main_class.py
Das Ergebnis ist natürlich dasselbe wie ↑. Wie bei der Funktion wird jedoch __name__: calc_class
ausgegeben.
Das heißt, der Name der aufgerufenen Datei wird in "name" und "main" in den Fall von sich selbst eingegeben.
__name__: calc_class
__name__2: __main__
8
3
15
data:5:Wert von y 2
・ Ich habe den Funktionsaufruf und die Klasse verglichen -Definieren Sie eine Klasse, rufen Sie sie auf und führen Sie die Instanz aus
・ Es ist kurz vor dem Schreiben von allgemeinem Python-Code ・ Dieses Buch beendet die Grundlagen von Python in diesem Abschnitt, aber die fehlenden Teile werden in zukünftigen Abschnitten ergänzt (in gewissem Sinne wird dieses Buch den Code weiterhin mit verschiedenen Python-Bibliotheken erklären).
Recommended Posts